springboot返回前端对象null转为空字符串
1
2 import com.fasterxml.jackson.core.JsonGenerator;
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.fasterxml.jackson.databind.BeanDescription;
5 import com.fasterxml.jackson.databind.JsonSerializer;
6 import com.fasterxml.jackson.databind.SerializationConfig;
7 import com.fasterxml.jackson.databind.SerializerProvider;
8 import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
9 import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
10 import org.apache.commons.lang3.StringUtils;
11 import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
12
13 import java.io.IOException;
14 import java.util.Collection;
15 import java.util.List;
16
17
18 /**
19 * 使用官方自带的json格式类库,fastjson因为content type问题时不时控制台报错、无法直接返回二进制等问题
20 */
21 class JacksonHttpMessageConverter extends MappingJackson2HttpMessageConverter {
22
23 /**
24 * 处理数组类型的null值
25 */
26 public class NullArrayJsonSerializer extends JsonSerializer<Object> {
27
28 @Override
29 public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
30 if (value == null) {
31 jgen.writeStartArray();
32 jgen.writeEndArray();
33 }
34 }
35 }
36
37
38 /**
39 * 处理字符串类型的null值
40 */
41 public class NullStringJsonSerializer extends JsonSerializer<Object> {
42
43 @Override
44 public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
45 jsonGenerator.writeString(StringUtils.EMPTY);
46 }
47 }
48
49 /**
50 * 处理数字类型的null值
51 */
52 public class NullNumberJsonSerializer extends JsonSerializer<Object> {
53
54 @Override
55 public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
56 jsonGenerator.writeNumber(0);
57 }
58 }
59
60 /**
61 * 处理布尔类型的null值
62 */
63 public class NullBooleanJsonSerializer extends JsonSerializer<Object> {
64
65 @Override
66 public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
67 jsonGenerator.writeBoolean(false);
68 }
69 }
70
71
72 public class MyBeanSerializerModifier extends BeanSerializerModifier {
73
74
75 @Override
76 public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
77 //循环所有的beanPropertyWriter
78 for (Object beanProperty : beanProperties) {
79 BeanPropertyWriter writer = (BeanPropertyWriter) beanProperty;
80 //判断字段的类型,如果是array,list,set则注册nullSerializer
81 if (isArrayType(writer)) {
82 //给writer注册一个自己的nullSerializer
83 writer.assignNullSerializer(new NullArrayJsonSerializer());
84 } else if (isNumberType(writer)) {
85 writer.assignNullSerializer(new NullNumberJsonSerializer());
86 } else if (isBooleanType(writer)) {
87 writer.assignNullSerializer(new NullBooleanJsonSerializer());
88 } else if (isStringType(writer)) {
89 writer.assignNullSerializer(new NullStringJsonSerializer());
90 }
91 }
92 return beanProperties;
93 }
94
95 /**
96 * 是否是数组
97 */
98 private boolean isArrayType(BeanPropertyWriter writer) {
99 Class<?> clazz = writer.getType().getRawClass();
100 return clazz.isArray() || Collection.class.isAssignableFrom(clazz);
101 }
102
103 /**
104 * 是否是string
105 */
106 private boolean isStringType(BeanPropertyWriter writer) {
107 Class<?> clazz = writer.getType().getRawClass();
108 return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz);
109 }
110
111
112 /**
113 * 是否是int
114 */
115 private boolean isNumberType(BeanPropertyWriter writer) {
116 Class<?> clazz = writer.getType().getRawClass();
117 return Number.class.isAssignableFrom(clazz);
118 }
119
120 /**
121 * 是否是boolean
122 */
123 private boolean isBooleanType(BeanPropertyWriter writer) {
124 Class<?> clazz = writer.getType().getRawClass();
125 return clazz.equals(Boolean.class);
126 }
127
128 }
129
130 JacksonHttpMessageConverter() {
131 getObjectMapper().setSerializerFactory(getObjectMapper().getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));
132 }
133
134 }
一定要在下面配置消息转换器,不然没效果
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
super.configureMessageConverters(converters);
converters.add(new JacksonHttpMessageConverter());
} }
如果想要更丰富的可以在:MyBeanSerializerModifier中自定义。
原文: https://blog.csdn.net/qq_38132283/article/details/89339817?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-15.baidujs&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-15.baidujs
springboot返回前端对象null转为空字符串的更多相关文章
- C# 对象遍历 string类型 null转空字符串和去前后空格
using System; using System.Collections.Generic; namespace OA.Common.Extensions { /// <summary> ...
- SQLSERVER NULL和空字符串的区别 使用NULL是否节省空间
SQLSERVER NULL和空字符串的区别 使用NULL是否节省空间 这里只讨论字符串类型,int.datetime.text这些数据类型就不讨论了,因为是否节省空间是根据数据类型来定的 在写这篇文 ...
- MySQL中NULL与空字符串
一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串’ ’是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而”则表示值是存在的,只不过是个 ...
- PHP递归方式把一个数组里面的null转换为空字符串”的方法
在一些接口的调用中,直接查询数据库出来的字段可能为null字段,但是为了简便前端的判断,需要把null转换成空字符串'',这个时候就需要递归的方式进行.直接上代码如下: //递归方式把数组或字符串 n ...
- 关于StringUtils类isEmpty、isNotEmpty、isBlank、isNotBlank针对null、空字符串和空白字符(如空格、制表符)的区别
isEmpty | null | 空字符串("")|空白字符(空格.制表符)| | isEmpty | true | true | false | | isNotEmpty | f ...
- Django与SQL语言中——NULL与空字符串的区别
SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, ...
- mysql 判断null 和 空字符串
1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 ...
- 【转】oracle中的NULL、''(空字符串)以及'_'(空格)
在Oracle中使用null,''(空字符串),'_'(空格)时,有没有遇到问题?产生疑惑? 1.NULL和''(空字符串)是一个意思 注:为了便于区分空字符串和空格,下面的示例均以'_'代表空格. ...
- Java知识点-判断null、空字符串和空格
Java知识点-判断null.空字符串和空格 // 判断headerKey是否为null,空字符串或者空格 if (headerKey != null && headerKey.len ...
- Oracle中Null与空字符串' '的区别
含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...
随机推荐
- (七) Mysql 之 binlog redolog 二阶段提交
(一)背景知识: 1 binlog binlog 我们中文一般称作归档日志, 是 MySQL Server 层的日志,而不是存储引擎自带的日志,它记录了所有的 DDL 和 DML(不包含数据查询语句) ...
- elasticsearch-8.6.1集群安装部署
elk官方下载地址:https://www.elastic.co/cn/downloads/ 1.创建普通用户及用户组 groupadd elasticsearch useradd elasticse ...
- WPFMVVM实现ICommand与INotifyPropertyChanged接口
话不多说直接上代码 INotifyPropertyChanged实现代码 internal class NotifyBase : INotifyPropertyChanged { public eve ...
- Apache druid笔记
Apache Duid学习笔记2 1.历史节点的查询效率与内存数据比成正比,内存越大则读取磁盘的次数越少, 历史节点内存越大总数据量越小则查询速度越快. 2.缓存机制可以选择外部和内部缓存,外部缓存如 ...
- [PHP]流程控制的替代语法:endif/endwhile/endfor使用介绍
我们经常在wordpress一类博客程序的模板里面看到很多奇怪的PHP语法,比如: 代码如下: <?php if(empty($GET_['a'])): ?> <font color ...
- Idea2020.2.3 创建JavaWeb项目(部署Tomcat)方法
1.创建项目不再是Java Enterprise了,而是先New 一个普通Java项目! 2.创建项目后,选择Run->Edit Configuration->左上角加号->Tomc ...
- Nginx njs模块注入js
如实现表单代填或者webvpn模式,后续待研究
- (mysql笔记)GROUP_CONCAT() 把多行数据合并
不合并查询: 合并查询: SELECT GROUP_CONCAT(id) FROM orderinfo WHERE enterpriseid = 2265 AND shopid =0 AND orde ...
- Iperf参数详解
IperfIperf是一个网络性能测试工具,可以测试TCP和UDP最大带宽,具有多种参数和UDP特性,可以根据需要调整,报告带宽,延迟,数据包丢失 通用参数-b(bandwidth):指定UDP模式使 ...
- nodejs. cron风,定时任务时间写法
export declare enum CronExpression { EVERY_SECOND = "* * * * * *", EVERY_5_SECONDS = " ...