天天看點

SpringBoot 自定義消息轉換器使用 Fastjson 作為消息轉換器自定義消息轉換器

使用 Fastjson 作為消息轉換器

如果你是作為 api 伺服器,那麼全部的 contentType 我建議都設定成

application/json

在 configure 配置檔案中添加如下配置

@Configuration
public class GlobalConfig implements WebMvcConfigurer{

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
       // 清除所有轉換器
        converters.clear();
        // fast json 轉換器
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        // 設定預設編碼
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        // 設定類型
        converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
        converters.add(converter);
    }
}
           

自定義消息轉換器

1.首先我們建立一個實體類

User.java

@Data
public class User{
    private String password;
    private String account;
}
           

2.然後建立一個

MyConverter

類繼承

AbstractHttpMessageConverter

并指定一個泛型,這個泛型表示的是你将要進行處理的指定資訊類型,例如

User

MyConverter .java

實作方法

public class  MyConverter extends AbstractHttpMessageConverter<User> {


    public MyConverter() {
        // 設定支援的媒體類型 application/json
        super(MediaType.APPLICATION_JSON);
    }

    @Override
    protected boolean supports(Class<?> clazz) {
        // 如果類型是屬于 User 類則進行處理
        return User.class.isAssignableFrom(clazz);
    }

    @Override
    protected User readInternal(Class<? extends User> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
        // 這裡是封裝 @RequestBody 的内容
        // 省略封裝過程,我們直接傳回一個空的 User 對象
        return new User();
    }

    @Override
    protected void writeInternal(User user, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        user.setAccount("修改後的名字");
        user.setPassword("修改後的密碼");
        // 輸出工具類
        StreamUtils.copy(JSONObject.toJSONString(user).getBytes(StandardCharsets.UTF_8),outputMessage.getBody());
    }
}

           
  • supports 傳遞的是一個消息類型,例如String或者其他類型,傳回 true 代表使用此消息轉換器進行消息轉換,否則跳過,尋找其他轉換器
  • readInternal 讀轉換器
  • writeInternal 寫轉換器

3.拓展我們的轉換器配置

@Configuration
public class GlobalConfig implements WebMvcConfigurer{

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
       // 清除所有轉換器
        converters.clear();
        // fast json 轉換器
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        // 設定預設編碼
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        // 設定類型
        converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
        // 添加自己的轉換器
        converters.add(new MyConverter());
        converters.add(converter);
    }
}
           
SpringBoot 自定義消息轉換器使用 Fastjson 作為消息轉換器自定義消息轉換器

使用 swagger 測試接口 : http://localhost:8080/hello

送出資料:

{
  "account": "string",
  "password": "string"
}
           

輸出 :

SpringBoot 自定義消息轉換器使用 Fastjson 作為消息轉換器自定義消息轉換器

繼續閱讀