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