如何忽略 parent class 中的嵌套字段?
How to ignore nested fields from parent class?
我有一个带有 child 属性 的 JSON 模型,其中有很多我想忽略的字段。例如
{
"id": 1,
"preference": {
"subproperty1": "dummy",
"subproperty2": "dummy",
"subproperty3": "dummy",
...
"subproperty40": "dummy",
},
"property1": "dummy",
"property2": "dummy",
...
"property30": "dummy",
}
我预期的反序列化结果看起来像
{
"id": 1,
"preference": {
"subproperty1": "dummy",
"subproperty2": "dummy",
},
"property1": "dummy",
"property2": "dummy"
}
意思是我想忽略当前和嵌套 class 中的很多字段,我知道有一个 @JsonIgnoreProperties
可以使用,例如
@JsonIgnoreProperties({"name", "property3", "property4", ..., "property30"})
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
protected static class MixInMyClass {
}
...
objectMapper.getDeserializationConfig().addMixInAnnotations(MyClass.class, MixInMyClass.class);
问题 1:如何忽略“中的嵌套字段(例如,sub属性3、sub属性4...sub属性30) MixInMyClass
?
之上的首选项"
问题 2:有没有像 JsonRequired
这样更简单的方法,它起到相反的作用,只允许某些需要的字段进入?所以我不需要像 jsonIgnore 那样有很多不需要的字段,而只需要像 (id, 属性1, 属性2)
这样的几个项目
- 据我所知没有。您还需要将
@JsonIgnoreProperties
放置在嵌套的 类 中。
- 查看 [[=22=] 观看次数][1]。有了它,您就可以知道每个视图中要包含哪些属性。您可以查看 1 次:
public class Views {
public static class Public {
}
}
然后在您的模型中,您需要用 @JsonView(Views.Public.class)
注释您希望可用的属性。
最后,在您的端点中,您将使用 @JsonView(Views.Public.class)
.
您可以通过注释 @JsonIgnoreProperties(ignoreUnknown = true).
来简单地解决这个问题
这是一个例子,
@JsonIgnoreProperties(ignoreUnknown = true)
class YouMainClass {
private Integer id;
private Preference preference;
private String property1;
private String property2;
// getters & setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
class Preference {
private String property1;
private String property2;
// getters & setters
}
使用此 YouMainClass
反序列化 JSON。反序列化时将忽略所有 unknow/unwanted 属性。
我有一个带有 child 属性 的 JSON 模型,其中有很多我想忽略的字段。例如
{
"id": 1,
"preference": {
"subproperty1": "dummy",
"subproperty2": "dummy",
"subproperty3": "dummy",
...
"subproperty40": "dummy",
},
"property1": "dummy",
"property2": "dummy",
...
"property30": "dummy",
}
我预期的反序列化结果看起来像
{
"id": 1,
"preference": {
"subproperty1": "dummy",
"subproperty2": "dummy",
},
"property1": "dummy",
"property2": "dummy"
}
意思是我想忽略当前和嵌套 class 中的很多字段,我知道有一个 @JsonIgnoreProperties
可以使用,例如
@JsonIgnoreProperties({"name", "property3", "property4", ..., "property30"})
@JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY)
protected static class MixInMyClass {
}
...
objectMapper.getDeserializationConfig().addMixInAnnotations(MyClass.class, MixInMyClass.class);
问题 1:如何忽略“中的嵌套字段(例如,sub属性3、sub属性4...sub属性30)
之上的首选项"MixInMyClass
?问题 2:有没有像
这样的几个项目JsonRequired
这样更简单的方法,它起到相反的作用,只允许某些需要的字段进入?所以我不需要像 jsonIgnore 那样有很多不需要的字段,而只需要像 (id, 属性1, 属性2)
- 据我所知没有。您还需要将
@JsonIgnoreProperties
放置在嵌套的 类 中。 - 查看 [[=22=] 观看次数][1]。有了它,您就可以知道每个视图中要包含哪些属性。您可以查看 1 次:
public class Views {
public static class Public {
}
}
然后在您的模型中,您需要用 @JsonView(Views.Public.class)
注释您希望可用的属性。
最后,在您的端点中,您将使用 @JsonView(Views.Public.class)
.
您可以通过注释 @JsonIgnoreProperties(ignoreUnknown = true).
这是一个例子,
@JsonIgnoreProperties(ignoreUnknown = true)
class YouMainClass {
private Integer id;
private Preference preference;
private String property1;
private String property2;
// getters & setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
class Preference {
private String property1;
private String property2;
// getters & setters
}
使用此 YouMainClass
反序列化 JSON。反序列化时将忽略所有 unknow/unwanted 属性。