Loading... ## 1. 问题 由于以前开发人员开发websocket相关模块的时候 继承了 `WebSocketConfigurer` 类, 重写了该类下面的 `configureMessageConverters()`方法 作用是解决响应头的`content-type`为`UTF-8` 接下来看代码 ``` public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer { /** * @Author: JiuyeXD * @Date: 2022/4/7 11:32 * @Description: TODO 详情转到 {@link ai.config.WebAppConfig} */ @Bean public HttpMessageConverter<String> responseBodyConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8")); return converter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); converters.add(responseBodyConverter()); } } ``` 后来注释了该段代码后发现返回的响应头变成了 ISO 然后中文字符全部变成了`?`  ## 2. 解决 参考[记一次 SpringBoot2.x 配置 Fastjson 的坑](https://www.jianshu.com/p/cff237cd5a70)的经验 新继承了`WebMvcConfigurationSupport`类 重写了下面的几个方法 一并处理了字符集还有日期格式还有*Long*长度*大于*17位时会出现精度丢失的问题 ``` import com.alibaba.fastjson.serializer.SerializeConfig; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.ToStringSerializer; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import com.alibaba.fastjson.support.spring.messaging.MappingFastJsonMessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.math.BigInteger; import java.nio.charset.Charset; import java.util.List; /** * <p> * WebAppConfig - webapp配置 * TODO 解决 {@link ai.websocket.WebSocketConfig} 产生的 {@link org.springframework.web.bind.annotation.RequestBody} 注解失效的问题 * </p> * * @author JiuyeXD * @version 1.0 * @since 2022/4/7 */ @Configuration public class WebAppConfig extends WebMvcConfigurationSupport { @Bean public HttpMessageConverter<String> responseBodyConverter() { StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8")); return converter; } /** * @Author: JiuyeXD * @Date: 2022/4/7 11:30 * @Description: TODO 定义一个convert转换消息的对象 * @return {@link MappingFastJsonMessageConverter} */ public FastJsonHttpMessageConverter messageConverter() { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); /* 添加fastjson的配置信息 */ FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( SerializerFeature.PrettyFormat, //全局修改日期格式,如果时间是data、时间戳类型,按照这种格式初始化时间 "yyyy-MM-dd HH:mm:ss" SerializerFeature.WriteDateUseDateFormat, // 保留map空的字段 SerializerFeature.WriteMapNullValue, // 将String类型的null转成"" SerializerFeature.WriteNullStringAsEmpty, // 将Number类型的null转成0 SerializerFeature.WriteNullNumberAsZero, // 将List类型的null转成[] SerializerFeature.WriteNullListAsEmpty, // 将Boolean类型的null转成false SerializerFeature.WriteNullBooleanAsFalse, // 避免循环引用 SerializerFeature.DisableCircularReferenceDetect); /* 配置属性拦截 将数字类型转为String传给前台防止数据精度丢失 */ SerializeConfig serializeConfig = SerializeConfig.globalInstance; serializeConfig.put(BigInteger.class, ToStringSerializer.instance); serializeConfig.put(Long.class, ToStringSerializer.instance); serializeConfig.put(Long.TYPE, ToStringSerializer.instance); fastJsonConfig.setSerializeConfig(serializeConfig); /* 在convert中添加配置信息 */ converter.setFastJsonConfig(fastJsonConfig); return converter; } /** * @Author: JiuyeXD * @Date: 2022/4/7 11:31 * @Description: TODO 解决中文乱码 * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(responseBodyConverter()); super.configureMessageConverters(converters); /* 定义一个convert转换消息的对象 */ converters.add(messageConverter()); /* 追加默认转换器 注:很重要否则不支持其他类型的请求 */ super.addDefaultHttpMessageConverters(converters); } } ``` Last modification:May 17, 2022 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 1 感谢大佬投喂 啾咪~
One comment
滴!学生卡!打卡时间:15:45:30,请上车的乘客系好安全带~