一般情况
@JsonIgnore
@JsonIgnore 用来告诉 Jackson 在处理时忽略该注解标注的 java pojo 属性,不管是将 java 对象转换成 json 字符串,还是将 json 字符串转换成 java 对象。
@JsonIgnoreProperties
@JsonIgnoreProperties 和 @JsonIgnore 的作用相同,都是告诉 Jackson 该忽略哪些属性,不同之处是 @JsonIgnoreProperties 是类级别的,并且可以同时指定多个属性。这里采用和上面同样的例子,修改java pojo 如下
@JsonIgnoreProperties(value={"desc"})
public class SomeEntity {
private String name;
private String desc;
//getter,setter 等省略
}
或者是指定类别:
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。
@JsonIgnoreType
@JsonIgnoreType 标注在类上,当其他类有该类作为属性时,该属性将被忽略。
@JsonProperty
@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”aaa”},而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用。
public class SomeEntity {
@JsonProperty("user_name")
private String userName;
// ...
}
只在序列化情况下生效的注解
@JsonPropertyOrder
在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonPropertyOrder 可以指定属性在 json 字符串中的顺序。
@JsonPropertyOrder(value={"desc","name"})
public class SomeEntity {
private String name;
private String desc;
//..
}
@JsonInclude
在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonInclude 注解可以控制在哪些情况下才将被注解的属性转换成 json,例如只有属性不为 null 时。
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SomeEntity {
private String name;
private String desc;
public SomeEntity(String name, String desc){
this.name = name;
this.desc = desc;
}
}
案例说明
ObjectMapper mapper = new ObjectMapper();
SomeEntity user = new SomeEntity ("zzf",null);
String outJson = mapper.writeValueAsString(user);
System.out.println(outJson);
//测试结果
//{"name":"zzf"}
是在反序列化情况下生效的注解
@JsonSetter
@JsonSetter 标注于 setter 方法上,类似 @JsonProperty ,也可以解决 json 键名称和 java pojo 字段名称不匹配的问题。
public class SomeEntity {
private String desc;
@JsonSetter("description")
public void setDesc(String desc) {
this.desc = desc;
}
}