记录一下 SpringBoot2.1.4 重写WebSocketConfigurer类下的configureMessageConverters()方法导致Content type 'application/json;charset=UTF-8' not supported的问题 [ 技术杂谈 ]
九叶的小窝 文章 正文

九叶
{{nature("2022-05-17 16:29:34")}}更新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 的坑的经验
新继承了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);
}
}
{{nature('2021-12-07 15:29:00')}} {{format('2286')}}人已阅读
{{nature('2021-01-31 20:01:00')}} {{format('1069')}}人已阅读
{{nature('2020-12-11 21:17:00')}} {{format('989')}}人已阅读
{{nature('2021-04-22 15:16:00')}} {{format('983')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}