反序列化器
针对从前端或Postman获取的数据,定义转换规则
1.自定义Boolean值判定规则
使用方法:需要判断的字段上添加
@JsonDeserialize(using = BooleanDeserializer.class)
自定义规则代码
重载 deserialize
方法
示例代码:0, false 为假 1, true为真
public class BooleanDeserializer extends JsonDeserializer<Boolean> {
private static final String TRUE = "true";
private static final String FALSE = "false";
private static final String ZERO = "0";
private static final String ONE = "1";
@Override
public Boolean deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
String text = StringUtils.defaultIfBlank(jsonParser.getText(), "").trim();
if (StringUtils.isBlank(text)) {
return null;
}
if (TRUE.equalsIgnoreCase(text) || ONE.equalsIgnoreCase(text)) {
return true;
}
if (FALSE.equalsIgnoreCase(text) || ZERO.equalsIgnoreCase(text)) {
return false;
}
}
}
2.指定null值转化规则
当前端或Postman发送的body体内,存在一个字段的值为null
如:{"name":null}
为了区分于不发送,自定义判定及转化规则
需要重载 deserialize
和 getNullValue
方法
使用@JsonDeserialize(using = ListStringNullAwareDeserializer.class)
自定义及转换,用法与第一个相同
public class ListStringNullAwareDeserializer extends JsonDeserializer<List<String>> {
@Override
public List deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException {
String json = jsonParser.readValueAsTree().toString();
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(json, new TypeReference<List<String>>() {
});
}
@Override
public List getNullValue(DeserializationContext ctx) {
return 发送null时想要得到的数据;
如 return new ArrayList<>();
}
}
示例代码意为:发送null时,得到一个空列表