springboot(20)fastjson设置不序列化字节流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sz85850597/article/details/81913335

问题

当设置fastjson为springboot的全局序列化工具后,当controller返回二进制字节流时,字节流被fastjson序列化为字符串。

@ResponseBody
@RequestMapping(value = "/downloadInfo.json")
public ResponseEntity<byte[]> xx(){
    return xx;
}
  • Preview
    这里写图片描述

  • Response
    这里写图片描述

解决

fastjson默认的MediaType支持为全部,因此需要指定fastjson支持的MediaType。对于fastjson不支持的application/octet-stream使用ByteArrayHttpMessageConverter直接发送到前端。

@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
    FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
    FastJsonConfig fastJsonConfig = new FastJsonConfig();
    fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
    fastConverter.setFastJsonConfig(fastJsonConfig);
    List<MediaType> supportedMediaTypes = new ArrayList<>();
    supportedMediaTypes.add(MediaType.APPLICATION_JSON);
    supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
    supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
    supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
    supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
    supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
    supportedMediaTypes.add(MediaType.APPLICATION_XML);
    supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
    supportedMediaTypes.add(MediaType.TEXT_HTML);
    supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
    supportedMediaTypes.add(MediaType.TEXT_PLAIN);
    supportedMediaTypes.add(MediaType.TEXT_XML);
    fastConverter.setSupportedMediaTypes(supportedMediaTypes);

    HttpMessageConverter<?> converter = fastConverter;
    return new HttpMessageConverters(converter,new ByteArrayHttpMessageConverter());
}
  • Preview
    这里写图片描述

  • Response
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/sz85850597/article/details/81913335
今日推荐