加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SPRINGBOOT返回数据NULL参数设为空字符串或空数组

(2022-05-26 22:31:59)
https://www.cnblogs.com/jthr/p/15825435.html

SPRINGBOOT返回数据NULL参数设为空字符串或空数组

package com.ruoyi.framework.config.ResponseVoConfig.WebConfig;


import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;

import java.io.IOException;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;


public class MyJsonMapper extends ObjectMapper {
    public MyJsonMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
        //Long类型转为String类型
        SimpleModule simpleModule = new SimpleModule();
        //simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        //simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        this.registerModule(simpleModule);
        this.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); //设置日期格式
        //处理空指针时设置的值
        this.getSerializerProvider().setNullValueSerializer(new JsonSerializer() { @Override public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { String fieldName = gen.getOutputContext().getCurrentName(); try { //反射获取字段类型 Field field = gen.getCurrentValue().getClass().getDeclaredField(fieldName); if (Objects.equals(field.getType(), String.class)) { //字符串型空值"" gen.writeString(""); return; } else if (Objects.equals(field.getType(), List.class)) { //列表型空值返回[]  gen.writeStartArray(); gen.writeEndArray(); return; } else if (Objects.equals(field.getType(), Map.class)) { //map型空值返回{}  gen.writeStartObject(); gen.writeEndObject(); return; } } catch (NoSuchFieldException e) { } //默认返回"" gen.writeString(""); } }); } }

 

package com.ruoyi.framework.config.ResponseVoConfig.WebConfig;


import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;


@Configuration
public class WebConfig extends WebMvcConfigurationSupport {

    @Override
    public void configureMessageConverters(List> converters) {
        //在json转换之前先进行string转换
        converters.add(new StringHttpMessageConverter());
        //添加json转换
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
        jackson2HttpMessageConverter.setObjectMapper(new MyJsonMapper());
        converters.add(jackson2HttpMessageConverter);
        //5、追加默认转换器
        super.addDefaultHttpMessageConverters(converters);
    }
}

 

分类: springboot

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有