JsonDeserializer:
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.JsonNode;
public class EmptyToNullCustomDeserializer extends JsonDeserializer<String> {
@Override
public String deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
JsonNode node = jp.readValueAsTree();
if (node.asText().isEmpty()) {
return null;
}
return node.toString();
}
}
POJO : @JsonDeserialize(using = EmptyToNullCustomDeserializer.class).
:
@JsonDeserialize(using = EmptyToNullCustomDeserializer.class)
private String content;
</" > :
, .
, EmptyToNullCustomDeserializer:
@Component
public class EmptyToNullCustomDeserializer extends StdDeserializer<String> {
protected EmptyToNullCustomDeserializer() {
super(String.class);
}
@Override
public String deserialize(JsonParser jp, DeserializationContext dc) throws IOException, JsonProcessingException {
JsonNode node = jp.readValueAsTree();
if (node.asText().isEmpty()) {
return null;
}
return node.toString();
}
}
:
@Component
public class JacksonConfiguration {
@Autowired
private EmptyToNullCustomDeserializer emptyToNullCustomDeserializer;
@Primary
@Bean
public Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder(List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
for (Jackson2ObjectMapperBuilderCustomizer customizer : customizers) {
customizer.customize(builder);
}
return builder;
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer addEmptyToNullStringDeserialization() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.deserializerByType(String.class, emptyToNullCustomDeserializer);
}
};
}
}