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允许任何一种数据类型的字段为空,除 ...
随机推荐
- CRM管理系统界面
- wibu软授权(五)
本篇将尝试根据RAU的asn1定义手动生成一份自定义的RAU文件,看看能不能通过wibu软授权系统的验证 准备工具 python3 asn1tools Ubuntu 18.04 CodeMeter R ...
- (前端面试题)详解 JS 的 setTimeout 和 setInterval 两大定时器
程序员面试题库分享 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全 推荐:★★★★★ 地址:前端技术导航大全 3.开发者颜色 ...
- vue 项目引入 jquery
一.引入 jquery 1. 方式一 默认会安装最新版本 jquery npm install jquery 2. 方式二 指定版本 npm install jquery@3.6.0 3. 方式三 在 ...
- 《CSOL大灾变》开发记录——武器购买逻辑开发
上次完成了武器购买界面设计,这次来完成武器购买逻辑与武器选择逻辑. 武器购买逻辑分为两个部分,一个部分是GUI部分的逻辑,也就是购买菜单,一个是武器游戏数据更新的逻辑,也就是实际中玩家获取武器的逻辑开 ...
- Mysql主从备份指定库别名
问题:replicate-rewrite-db 不生效 解决方案: 尝试 注释掉 replicate-do-db ,不写 replicate-ignore-db,只写 replicate-rewri ...
- 在Github上搭建个人主页
最近试着在github上搭建个人主页,没用github给的模板,用的是自己在网上找到那种类似个人主页的模板,到时候直接上传到仓库里就行了 首先先创建仓库,点击右上角的加号,选择New reposito ...
- .net core layui折叠表格的应用。
效果展示 头部的折叠,展开,搜索按钮 <div class="layui-fluid"> <div style="margin-top: 20px;&q ...
- python菜鸟学习: 12. 装饰器的中级用法
# -*- coding: utf-8 -*-username = "liyuzhoupan"password = "123"def author(wrappr ...
- Firefox彻底禁用自动更新提示
实验版本:96 安装目录下新建文件夹:distribution 新建文件:policies.json 文件内容为: { "policies": { "DisableApp ...