自定义jackson反序列null和空字符串的默认值
程序员文章站
2022-04-20 08:30:48
将json反序列化,但是不希望对象的属性中有null或者空字符串,那么就可以采用以下方案。首先是实体类package com.example.demo.dto;import com.example.demo.config.StringDeserializer;import com.fasterxml.jackson.annotation.JsonProperty;import com.fasterxml.jackson.databind.annotation.JsonDeserialize;i...
将json反序列化,但是不希望对象的属性中有null或者空字符串,那么就可以采用以下方案。
首先是实体类
package com.example.demo.dto;
import com.example.demo.config.StringDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@JsonProperty(value = "name")
@JsonDeserialize(using = StringDeserializer.class)
private String name = "-";
@JsonProperty(value = "age")
private Integer age = 22;
@JsonProperty(value = "sex")
private String sex = "-";
}
接下来是反序列化String的例子,其他类型没试过,但是猜测应该差不了多少。
package com.example.demo.config;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonMappingException;
import java.io.IOException;
import org.springframework.util.StringUtils;
public class StringDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
String value = jsonParser.getText();
return StringUtils.isEmpty(value) ?
"-" : value;
}
@Override
public String getNullValue(DeserializationContext ctxt) throws JsonMappingException {
return "-";
}
}
这种方案可以将以下三种情况转换成自定义的默认值:
- json中没有这种属性。
- json中有这种属性,但是为null。
- json中有这种属性,但是为“”(空字符串)。
第一种情况下,反序列化时,取的是实体类中的默认值;
第二种情况下,反序列化时会走自定义的反序列化类,但是不走deserialize方法,而是调用getNullValue()方法;
第三种情况下,会调用deserialize方法。
在实体类需要使用这种逻辑处理的属性上加上@JsonDeserialize(using = StringDeserializer.class)注解,即可生效。
本文地址:https://blog.csdn.net/baidu_33470149/article/details/109567365