转:https://www.pianshen.com/article/950119559/

1.返回对象参数为null时,该参数选择显示或者不显示

  在返回参数给前端的时候,有些参数的值为null的时候,我们可以设置需要显示或者不需要显示

1.1设置返回为null的参数

  在配置文件中加入配置

spring.jackson.default-property-inclusion: always

1.2设置不返回为null的参数

  在配置文件中加入配置

spring.jackson.default-property-inclusion: non_null

2.返回参数为null时,转换为空字符串或者空数组

  在返回数据时,前端不想要null值,需要我们把字符串、数字类型的null转换为空字符串,把集合类型的null转换为[]

2.1创建类MyNullArrayJsonSerializer

  该类会将字段类型为集合类型的null值处理成空集合

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; /**
* 处理数组类型的null值
*/
public class MyNullArrayJsonSerializer extends JsonSerializer { @Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
if (value == null) {
jgen.writeStartArray();
jgen.writeEndArray();
}
}
}

2.2 创建类MyNullJsonSerializer

  该类会将字段类型为字符串、int等类型的null值处理成空字符串

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; /**
* 处理字符串等类型的null值
*/
public class MyNullJsonSerializer extends JsonSerializer{ @Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws IOException, JsonProcessingException {
jsonGenerator.writeString("");
}
}

2.3创建类MyBeanSerializerModifier

  该类控制将null值处理成空集合还是空字符串

package com.answer.waka.framework.platform.configuration;

import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; import java.util.List;
import java.util.Set; public class MyBeanSerializerModifier extends BeanSerializerModifier { // 数组类型
private JsonSerializer _nullArrayJsonSerializer = new MyNullArrayJsonSerializer();
// 字符串等类型
private JsonSerializer _nullJsonSerializer = new MyNullJsonSerializer(); @Override
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc,
List beanProperties) {
//循环所有的beanPropertyWriter
for (int i = 0; i < beanProperties.size(); i++) {
BeanPropertyWriter writer = (BeanPropertyWriter) beanProperties.get(i);
//判断字段的类型,如果是array,list,set则注册nullSerializer
if (isArrayType(writer)) {
//给writer注册一个自己的nullSerializer
writer.assignNullSerializer(this._nullArrayJsonSerializer);
} else {
writer.assignNullSerializer(this._nullJsonSerializer);
}
}
return beanProperties;
} //判断是什么类型
protected boolean isArrayType(BeanPropertyWriter writer) {
Class clazz = writer.getPropertyType();
return clazz.isArray() || clazz.equals(List.class) || clazz.equals(Set.class);
} }

2.4配置类

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; /**
* 处理返回值中的null值
*/
@Configuration
public class JsonConfig { @Bean
public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() { final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = converter.getObjectMapper(); // 为mapper注册一个带有SerializerModifier的Factory,此modifier主要做的事情为:当序列化类型为array,list、set时,当值为空时,序列化成[]
mapper.setSerializerFactory(mapper.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier())); return converter;
} }

这样子处理后发现一个问题,Map格式数据返回,里面的日期全部成为了时间戳

最新文章

  1. JavaWeb学习笔记——过滤器
  2. 监听页面上的checkbox是否选中
  3. NSString 和NSData 转换
  4. Websocket简单例子
  5. 关于json解析中 解析多重json对象
  6. SpringMVC常用注解實例詳解2:@ModelAttribute
  7. 精通AngularJS 读书笔记(1)
  8. 使jQuqer更高效的方法
  9. Web.Config文件中使用configSource
  10. STL unique使用问题
  11. Java设计模式02:常用设计模式之工厂模式(创建型模式)
  12. 武汉科技大学ACM :1002: A+B for Input-Output Practice (II)
  13. 《JavaScript+DOM编程艺术》的摘要(四)appendChild与insertBefore的区别
  14. jQuery焦点图切换特效插件封装
  15. iOS开发——GCDAsyncSocket
  16. MySQL中 InnoDB 和 MyISAM 小结
  17. day5_ 导入模块和包
  18. FxZ,C#开发职位面试测试题(30分钟内必须完成)
  19. 【转】解决memcached启动失败
  20. R语言-探索两个变量

热门文章

  1. 使用 Go HTTP 框架 Hertz 进行 JWT 认证
  2. java8 (jdk 1.8) 新特性——Lambda
  3. 在 Solidity 中 ++i 为什么比 i++ 更省 Gas?
  4. MathNet用到的一些功能
  5. 【每日一题】【DFS&amp;每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216
  6. Flaks框架(g对象,session,数据库连接池,信号,flask-script,SQLAlchemy(ORM))
  7. BOM与DOM之BOM操作
  8. 【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康
  9. [数据结构]单向链表及其基本操作(C语言)
  10. 2、postman调试