使用 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 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);
}
}
使用 swagger 测试接口 : http://localhost:8080/hello
提交数据:
{
"account": "string",
"password": "string"
}
输出 :