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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用三元表达式或者逻辑或运算符来将 null 转成空串: ```javascript let str = null; // 使用三元表达式 str = str ? str : ''; // 使用逻辑或运算符 str = str || ''; ``` 这两种方法都会先判断 str 是否为真,如果 str 为 null、undefined、false、0、NaN 或空串,则返回空串。如果 str 是一个非空字符串,则返回原字符串。 ### 回答2: 在JavaScript中,将null转换为空字符串的方法有很多种。下面我将介绍两种常用的方法。 方法一:使用条件运算符 ```javascript var value = null; var result = value ? value : ''; console.log(result); // 输出:'' ``` 这种方法利用了条件运算符(也称为三元运算符)的特性,如果value的值为真,则返回value;如果value的值为假(包括null、undefined、false、0和空字符串等),则返回空字符串。 方法二:使用逻辑或运算符 ```javascript var value = null; var result = value || ''; console.log(result); // 输出:'' ``` 这种方法利用了逻辑或运算符的特性,如果value的值为真,则返回value;如果value的值为假,则返回空字符串。由于null被视为假值,所以当value为null,逻辑或运算符会返回空字符串。 需要注意的是,以上两种方法都是针对null值进行转换的,不适用于其他假值(如undefined、false、0和空字符串等)。如果需要将其他假值转换为空字符串,可以使用相同的方法。 ### 回答3: 在JavaScript中,我们可以通过几种不同的方法将null值转换为空字符串。下面我将向你展示一种常见的方法。 最常用的方法是使用条件(if)语句来检查值是否为null,然后将其转换成空字符串。下面是一个示例代码: ```javascript let value = null; // 定义一个值为null的变量 if (value === null) { // 使用条件语句检查值是否为null value = ''; // 如果值为null,则将其转换成空字符串 } console.log(value); // 输出结果为 '' ``` 在这个示例中,我们创建了一个名为value的变量,并将其赋值为null。然后我们使用条件语句(if语句)来检查value的值是否为null。如果它是null,我们将其转换成空字符串''。 这种方法非常简单而且易于理解。但请注意,这只适用于将null转换为字符串。如果你需要将其他类型的值转换成空字符串,你可能需要使用不同的方法。 希望这个回答对你有所帮助!如果你还有其他问题,请随提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值