反序列化注解
@JsonCreator
用于指定一个构造方法,用于反序列化。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
@JsonCreator
public User(@JsonProperty("name") String username, @JsonProperty("age") Integer age) {
this.username = username;
this.age = age;
}
}
String userStr = "{\"name\":\"job\",\"age\":18}";
User user = objectMapper.readValue(userStr, User.class);
// 打印结果:User(username=job, age=18)
@JacksonInject
用于指定一个属性,用于注入值。而不是从 JSON 中读取。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
@JacksonInject
private String city;
}
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setInjectableValues(new InjectableValues.Std().addValue(String.class, "beijing"));
String userStr = "{\"username\":\"job\",\"age\":18}";
User user = objectMapper.readValue(userStr, User.class);
// 打印结果:User(username=job, age=18, city=beijing)
@JsonAnySetter
用于指定一个方法,用于反序列化时,将未知的属性值存储到一个 Map 对象中。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
private Map<String, String> properties = new HashMap<>();
@JsonAnySetter
public void set(String key, String value) {
properties.put(key, value);
}
}
String userStr = "{\"username\":\"job\",\"age\":18,\"city\":\"beijing\"}";
User user = objectMapper.readValue(userStr, User.class);
// 打印结果:User(username=job, age=18, properties={city=beijing})
@JsonSetter
用于指定一个方法,用于反序列化时,将属性值设置到指定的属性中。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
@JsonSetter("name")
public void setUsername(String username) {
this.username = username;
}
}
String userStr = "{\"name\":\"job\",\"age\":18}";
User user = objectMapper.readValue(userStr, User.class);
// 打印结果:User(username=job, age=18)
@JsonDeserialize
用于指定自定义的反序列化器。
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String username;
private Integer age;
@JsonDeserialize(using = CustomDeserializer.class)
private String properties;
}
public class CustomDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return "custom-" + p.getText();
}
}
String userStr = "{\"username\":\"job\",\"age\":18,\"properties\":\"beijing\"}";
User user = objectMapper.readValue(userStr, User.class);
// 打印结果:User(username=job, age=18, properties=custom-beijing)
最后更新于
这有帮助吗?