Jackson序列化json时null转成空对象或空串

在项目中可能会遇到null,转JSON时不希望出现null,可以添加下面的配置解决这个问题。

一、添加JacksonConfig 配置

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import java.io.IOException;

@Configuration
public class JacksonConfig {

    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        // 关键代码-解决No serializer found for class java.lang.Object异常
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                //jsonGenerator.writeString("");//空串
                jsonGenerator.writeObject(new Object());//空对象
            }
        });
        return objectMapper;
    }

}

二、注意

1关键代码分析

objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)

代码的作用是解决下面的异常

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: cloudpc.datasource.common.response.Result["data"])

2 @ConditionalOnMissingBean

它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员。

一般来说,对于自定义的配置类,我们应该加上@ConditionalOnMissingBean注解,以避免多个配置同时注入的风险。

三、参考

https://blog.csdn.net/sdyy321/article/details/40298081

https://www.cnblogs.com/long88-club/p/11361174.html

https://segmentfault.com/a/1190000008287502

http://www.cppcns.com/ruanjian/java/333889.html

猜你喜欢

转载自blog.csdn.net/cs373616511/article/details/111660503
今日推荐