SpringBoot项目Json中的空值处理,将null转为空字符串"",空list转为空数组等

本篇使用fastjson进行空值null处理

Jackson的请看:https://blog.youkuaiyun.com/qq_31183727/article/details/99539115

项目中之前用的null值转空串方法,将空list也转换为了"",不适合需求,之后在网上找的方法修改后,适用现在的需求,现在分享给大家。

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.util.List;

/**
 * 返回结果,null按类型转换为对应的默认值
 */
@Configuration
public class ResultConfig extends WebMvcConfigurerAdapter{
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                //List字段如果为null,输出为[],而非null
                SerializerFeature.WriteNullListAsEmpty,
                //是否输出值为null的字段,默认为false
                SerializerFeature.WriteMapNullValue,
                //字符串null返回空字符串
                SerializerFeature.WriteNullStringAsEmpty,
                //空布尔值返回false
                SerializerFeature.WriteNullBooleanAsFalse,
                //结果是否格式化,默认为false
                SerializerFeature.PrettyFormat);
        //格式化日期
        fastJsonConfig.setDateFormat("YYYY-MM-dd HH:mm:ss");
        converter.setFastJsonConfig(fastJsonConfig);
        converters.add(converter);
   }
}

下面是从别的博客找的一些SerializerFeature中的属性及含义


名称                                                                含义    
QuoteFieldNames     输出key时是否使用双引号,默认为true     
UseSingleQuotes     使用单引号而不是双引号,默认为false     
WriteMapNullValue     是否输出值为null的字段,默认为false     
WriteEnumUsingToString     Enum输出name()或者original,默认为false     
UseISO8601DateFormat     Date使用ISO8601格式输出,默认为false     
WriteNullListAsEmpty     List字段如果为null,输出为[],而非null     
WriteNullStringAsEmpty     字符类型字段如果为null,输出为”“,而非null     
WriteNullNumberAsZero     数值字段如果为null,输出为0,而非null     
WriteNullBooleanAsFalse     Boolean字段如果为null,输出为false,而非null     
SkipTransientField     如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true     
SortField     按字段名称排序后输出。默认为false     
WriteTabAsSpecial     把\t做转义输出,默认为false     不推荐
PrettyFormat     结果是否格式化,默认为false     
WriteClassName     序列化时写入类型信息,默认为false。反序列化是需用到     
DisableCircularReferenceDetect     消除对同一对象循环引用的问题,默认为false     
WriteSlashAsSpecial     对斜杠’/’进行转义     
BrowserCompatible     将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false     
WriteDateUseDateFormat     全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);     
DisableCheckSpecialChar     一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false     
NotWriteRootClassName     含义     
BeanToArray     将对象转为array输出     
WriteNonStringKeyAsString     Map<Integer,Stirng> 输出 key 默认为 Integer添加此属性,Integer 添加了 “”,变成字符型
NotWriteDefaultValue     将基础类型的默认值屏蔽     
BrowserSecure     含义     
IgnoreNonFieldGetter     含义     
WriteEnumUsingName     用枚举name()输出
--------------------- 
作者:孤天浪雨 
来源:优快云 
原文:https://blog.youkuaiyun.com/u010246789/article/details/52539576 

 

<think>好的,用户想用Hutool将字符串转换为List数组,我需要先回忆Hutool的相关方法。记得Hutool的Convert类有toList方法,可以直接处理。比如用户提到的示例,用str.split(",")分割字符串,再传给Convert.toList。不过可能还有其他方式,比如用JSONUtil,如果字符串本身是JSON数组格式的话。比如用户提供的引用里提到JSONUtil的getJSONArray方法,可以解析数组。这时候需要先判断字符串的格式是逗号分隔还是JSON数组。如果是逗号分隔,用split加Convert比较直接;如果是JSON数组,用JSONUtil.parseArray更好。另外要提醒用户注意异常处理,比如字符串格式不正确的情况。可能还需要示例代码,两种方法都展示一下,让用户根据实际情况选择。最后检查一下Hutool的版本是否支持这些方法,确保代码正确性。</think>要将字符串转换为List数组,可以通过Hutool工具库的`Convert`类或`JSONUtil`类实现,具体方法如下: ### 方法一:使用Convert类(适用于逗号分隔的字符串) 若字符串是简单的逗号分隔格式(如`"apple,banana,orange"`),可先用`split`方法分割,再转换为List: ```java String str = "apple,banana,orange"; List<String> list = Convert.toList(str.split(",")); ``` 该方法会返回`ArrayList`类型[^1]。 --- ### 方法二:使用JSONUtil类(适用于JSON数组字符串) 若字符串JSON数组格式(如`["apple","banana","orange"]`),可直接用`JSONUtil.parseArray`解析: ```java String jsonStr = "[\"apple\",\"banana\",\"orange\"]"; JSONArray jsonArray = JSONUtil.parseArray(jsonStr); List<String> list = jsonArray.toList(String.class); ``` 通过`JSONArray.toList()`可指定元素类型(如`String.class`)[^3]。 --- ### 完整示例代码 ```java import cn.hutool.core.convert.Convert; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; import java.util.List; public class StringToListDemo { public static void main(String[] args) { // 方法一:逗号分隔字符串List String str1 = "apple,banana,orange"; List<String> list1 = Convert.toList(str1.split(",")); System.out.println("方法一结果:" + list1); // 方法二:JSON数组字符串List String str2 = "[\"apple\",\"banana\",\"orange\"]"; JSONArray jsonArray = JSONUtil.parseArray(str2); List<String> list2 = jsonArray.toList(String.class); System.out.println("方法二结果:" + list2); } } ``` ### 注意事项 1. **字符串格式匹配**:根据数据格式选择方法,避免解析失败。 2. **空值处理**:若JSON字段可能为`null`,可用`JSONUtil.getStr()`安全获取值。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值