首頁 > 軟體

springboot返回值轉成JSONString的處理方式

2022-06-18 14:02:14

返回值轉成JSONString的處理

主要需求描述

有些返回值中的null需要轉換成“”或[],另外有些返回值需要把null給遮蔽掉。

解決方法

一(很lowb)

所有的返回值均採用string,在返回值之前,自己特殊處理成JSONString,然後返回給前端即可。

二(比較正統)

通過設定FastJsonConfig,設定類如下: 

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
  @Override
  public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    super.configureMessageConverters(converters);
    //1.定義一個convert轉換訊息物件
    FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
    //2.新增fastjson的設定資訊,比如:是否要格式化返回json資料
    FastJsonConfig fastJsonConfig = new FastJsonConfig();
    fastJsonConfig.setSerializerFeatures(
        SerializerFeature.PrettyFormat,
        SerializerFeature.WriteNullStringAsEmpty,
        SerializerFeature.DisableCircularReferenceDetect,
        SerializerFeature.WriteNullListAsEmpty
    );
    PropertyFilter propertyFilter = new PropertyFilter() {
      @Override
      public boolean apply(Object object, String name, Object value) {
        if (object instanceof MessageFor841 && value == null) {
          return false;
        }
        return true;
      }
    };
    fastJsonConfig.setSerializeFilters(propertyFilter);
    fastConverter.setFastJsonConfig(fastJsonConfig);
    converters.add(fastConverter);
  }
}

這裡解釋一下PropertyFilter類中的apply方法,

首先3個引數:

  • object:可以理解成需要轉成json的物件
  • name:欄位名(屬性名)
  • value:欄位值(屬性值)

返回值是一個boolean值,為true時,則對應轉成成jsonstring,為false時,則過濾掉。

這裡型別為MessageFor841且它的屬性欄位為null時返回false,表示此欄位過濾掉。

其他型別null欄位轉成""或[] 

JSON.toJSONString

後端想將HashMap型別資料返回成json字串

即匯入並使用JSON.toJSONString

使用前提

pom.xml

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>

使用頁需自己寫入下列語句,否則無法自行匯入

import com.alibaba.fastjson.JSON;

使用

 HashMap<String, Object> data = new HashMap<>();
 List<MainMenu> mainMenus = menuDao.getMainMenus();
 data.put("data",mainMenus);
 data.put("status",200);
 String data_json = JSON.toJSONString(data);
 System.out.println("成功存取!!!");
 return data_json;

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com