springboot配置Jackson返回统一默认值的实现示例

 更新时间:2021年07月29日 11:42:08   作者:阿豪_mike  
在项目开发中,我们返回的数据或者对象没有的时候一般直接返回的null,那么如何返回统一默认值,感兴趣的可以了解一下

在项目开发中,我们返回的数据或者对象没有的时候一般直接返回的null

有数据时的返回值

{
 "flag": true,
 "code": "10000",
 "msg": "成功!",
 "data": {
  "id": 32,
  "templateType": 1,
  "templateName": "我的测试模板1",
  "freightName": "我的测试标题1",
  "listArea": [
   {
    "id": 968,
    "templateId": 32,
    "freightPrice": 15,
   }
  ],
  "templateDescEntity": {
   "id": 1
   "name": "xxx"
  }
 }
}

没有数据时的返回值

{
 "flag": true,
 "code": "10000",
 "msg": "成功!",
 "data": {
  "id": 32,
  "templateType": 1,
  "templateName": null,
  "freightName": null,
  "listArea": null,
  "templateDescEntity": null
 }
}

这种情况下数据返回给前端,前端需要做大量的空值判断
如前端调使用属性data.templateDescEntity.id的时候就会直接报异常
此时我们可以使用返回值统一处理,配置如下

pom.xml添加

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.5</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

java类添加配置

package com.ys.mall.core.product.config;

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 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;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 数据返回给前端时,设置null值默认为""
 *
 * @author cgh
 * @date 2020/12/14 10:35
 */
@Configuration
public class JacksonConfig {

    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                String fieldName = jsonGenerator.getOutputContext().getCurrentName();
                try {
                    //反射获取字段类型
                    Field field = jsonGenerator.getCurrentValue().getClass().getDeclaredField(fieldName);
                    if (CharSequence.class.isAssignableFrom(field.getType())) {
                        //字符串型空值""
                        jsonGenerator.writeString("");
                        return;
                    } else if (Collection.class.isAssignableFrom(field.getType())) {
                        //列表型空值返回[]
                        jsonGenerator.writeStartArray();
                        jsonGenerator.writeEndArray();
                        return;
                    } else if (Map.class.isAssignableFrom(field.getType())) {
                        //map型空值 或者 bean对象 返回{}
                        jsonGenerator.writeStartObject();
                        jsonGenerator.writeEndObject();
                        return;
                    }
                } catch (NoSuchFieldException ignored) {
                }

                jsonGenerator.writeString("");
            }
        });
        return objectMapper;
    }
}

添加空值统一处理后的返回值

{
 "flag": true,
 "code": "10000",
 "msg": "成功!",
 "data": {
  "id": 32,
  "templateType": 1,
  "templateName": "",
  "freightName": "",
  "listArea": [],
  "templateDescEntity": {}
 }
}

到此这篇关于springboot配置Jackson返回统一默认值的实现示例的文章就介绍到这了,更多相关springboot Jackson返回统一默认值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 如何判断是否是26个英文字母

    java 如何判断是否是26个英文字母

    这篇文章主要介绍了java 如何判断是否是26个英文字母的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 解决idea每次新建项目都需要重新指定maven目录

    解决idea每次新建项目都需要重新指定maven目录

    这篇文章主要介绍了解决idea每次新建项目都需要配置maven,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java操作excel表格详解

    java操作excel表格详解

    在日常工作中,对Excel工作表格的操作处理可是多的数不清楚,下面是java语言对其的操作,有需要的小伙伴可以参考下
    2021-10-10
  • java计算两个日期中间的时间

    java计算两个日期中间的时间

    这篇文章主要介绍了java计算两个日期中间的时间的相关资料,需要的朋友可以参考下
    2017-04-04
  • 将本地JAR文件手动添加到Maven本地仓库的实现过程

    将本地JAR文件手动添加到Maven本地仓库的实现过程

    在Java开发中,使用Maven作为项目管理工具已经成为了主流的选择,Maven提供了强大的依赖管理功能,可以轻松地下载和管理项目所需的库和工具,在某些情况下,你可能会需要将本地下载的JAR文件手动添加到Maven的本地仓库中,这篇博客将详细介绍如何实现这一过程
    2024-10-10
  • 解读file.exists(),file.isFile()和file.isDirectory()的区别

    解读file.exists(),file.isFile()和file.isDirectory()的区别

    本文介绍了Java中的File类的三个方法:file.exists()、file.isFile()和file.isDirectory(),并详细解释了它们的区别和使用场景
    2025-02-02
  • spring boot 配置动态刷新详解

    spring boot 配置动态刷新详解

    这篇文章主要介绍了spring boot 配置动态刷新实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • Scala 操作Redis使用连接池工具类RedisUtil

    Scala 操作Redis使用连接池工具类RedisUtil

    这篇文章主要介绍了Scala 操作Redis使用连接池工具类RedisUtil,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Java scala模式匹配机制详解

    Java scala模式匹配机制详解

    模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断
    2023-02-02
  • Spring循环依赖产生与解决

    Spring循环依赖产生与解决

    Spring的解决循环依赖是有前置条件的,要解决循环依赖我们首先要了解Spring Bean对象的创建过程和依赖注入的方式。依赖注入方式,我之前的博客有所分享,大家可以在看本篇文章之前进行一下小小的回顾
    2022-12-12

最新评论