【发布时间】:2021-11-28 05:05:58
【问题描述】:
我有一个类似下面的 JSON 对象:
[
{
"objA": {
"propA": "AAAA",
"propB": "BBBB",
"objB": {
"objC": {
"propC": "CCCC",
"propD": "DDDD"
}
},
"objD": [
"asa"
],
"propE": "AW",
"propF": "533",
"propG": "ABW",
"propH": "ARU",
"objE": {
"objF": {
"propI": "SASDS",
"propJ": "54DEFF"
}
}
}
}
]
当我将这个 JSON 反序列化为 List 时,我想对这个对象的一部分做,例如:我想忽略 objB、objC、objD、objE 和 objF。 为此,我使用了 @JsonIgnore 注释。所以我做了这样的事情:
public class MyClass {
// objects and properties not ignorabled
private ClassA objA;
private String propE;
private String propF;
private String propG;;
private String propH;
// objects ignorabled in deserialization
@JsonProperty("objB")
@JsonIgnore
private Object objB;
@JsonProperty("objD")
@JsonIgnore
private Object objD;
@JsonProperty("objE")
@JsonIgnore
private Object objE;
/** gets and setters here **/
按照下面的反序列化我的 JSON 的代码进行操作
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(url, new TypeReference<List<MyClass>>(){});
此代码正在运行。此代码忽略来自 JSON 的对象,但我相信还有其他方法可以做到这一点,而不是对我的实体中的每个对象或属性使用 @JsonIgnore。
你知道我怎样才能做得更好吗?
【问题讨论】:
-
当您在序列化和反序列化期间要排除特定属性时,
@JsonIgnore是一个不错的选择。但是,如果您有更多动态需求,您可以实现自己的自定义反序列化器。class MyDeser extends StdDeserializer<MyClass>.
标签: java spring spring-boot java-8