Jackson 自定义 反序列化
POJO
@Data
public class UserDTO {
private Integer id;
private String name;
private Integer age;
}
Deserializer
public class ToUserDeserializer extends JsonDeserializer<UserDTO> {
@Override
public UserDTO deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
UserDTO dto = new UserDTO();
if (node.has("s_id")) {
Integer val = node.get("s_id").asInt();
dto.setId(val);
}
if (node.has("s_name")) {
String val = node.get("s_name").asText();
dto.setName(val);
}
if (node.has("s_age")) {
Integer val = node.get("s_age").asInt();
dto.setAge(val);
}
return dto;
}
}
Test
public class Test {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper om = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addDeserializer(UserDTO.class, new ToUserDeserializer());
om.registerModule(simpleModule);
String json = "{\"s_id\":1,\"s_name\":\"test\",\"s_age\":11}";
final UserDTO dto = om.readValue(json, UserDTO.class);
System.out.println(om.writeValueAsString(dto));
}
}
{"id":1,"name":"test","age":11}