天天看点

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 作为消息转换器自定义消息转换器

继续阅读