springboot怎么配置Jackson返回统一默认值

这篇文章主要介绍“springboot怎么配置Jackson返回统一默认值”,在日常操作中,相信很多人在springboot怎么配置Jackson返回统一默认值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”springboot怎么配置Jackson返回统一默认值”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

springboot怎么配置Jackson返回统一默认值

有数据时的返回值

{
"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类添加配置

packagecom.ys.mall.core.product.config;

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

importjava.io.IOException;
importjava.lang.reflect.Field;
importjava.util.Collection;
importjava.util.List;
importjava.util.Map;
importjava.util.Objects;

/**
*数据返回给前端时,设置null值默认为""
*
*@authorcgh
*@date2020/12/1410:35
*/
@Configuration
publicclassJacksonConfig{

@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
publicObjectMapperjacksonObjectMapper(Jackson2ObjectMapperBuilderbuilder){
ObjectMapperobjectMapper=builder.createXmlMapper(false).build();
objectMapper.getSerializerProvider().setNullValueSerializer(newJsonSerializer<Object>(){
@Override
publicvoidserialize(Objecto,JsonGeneratorjsonGenerator,SerializerProviderserializerProvider)throwsIOException{
StringfieldName=jsonGenerator.getOutputContext().getCurrentName();
try{
//反射获取字段类型
Fieldfield=jsonGenerator.getCurrentValue().getClass().getDeclaredField(fieldName);
if(CharSequence.class.isAssignableFrom(field.getType())){
//字符串型空值""
jsonGenerator.writeString("");
return;
}elseif(Collection.class.isAssignableFrom(field.getType())){
//列表型空值返回[]
jsonGenerator.writeStartArray();
jsonGenerator.writeEndArray();
return;
}elseif(Map.class.isAssignableFrom(field.getType())){
//map型空值或者bean对象返回{}
jsonGenerator.writeStartObject();
jsonGenerator.writeEndObject();
return;
}
}catch(NoSuchFieldExceptionignored){
}

jsonGenerator.writeString("");
}
});
returnobjectMapper;
}
}

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

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

到此,关于“springboot怎么配置Jackson返回统一默认值”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!

发布于 2021-07-29 21:59:21
收藏
分享
海报
0 条评论
164
上一篇:Java文档注释用法以及JavaDoc的使用说明 下一篇:nginx服务器的下载安装与使用方法
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码