Springboot返回数据给前端-参数为null处理


转: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格式数据返回,里面的日期全部成为了时间戳


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM