使用 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);
}
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3ITYkVTN3QWMhRDN5gTYhhzMhRDNlZ2MwcjMiZTNmdzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
使用 swagger 測試接口 : http://localhost:8080/hello
送出資料:
{
"account": "string",
"password": "string"
}
輸出 :