做项目遇到奇怪的合作方要求返回纯字符串报文的,但是我们项目默认返回的报文格式都是json格式的,返回纯字符串格式的报文会出现字符串外面又包了双引号的情况。比如本来是要返回字符串SUCCESS的,得到的返回结果却是"SUCCESS"。
百度了下,下面这篇博文给了我启发
https://blog.csdn.net/baidu_27055141/article/details/91544019
突破口在 configureMessageConverters 这个方法,这个方法配置了工程使用的消息转换器。在全工程内搜索configureMessageConverters果然在WebConfig 找到了配置的地方。
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
List<MediaType> list = new ArrayList<MediaType>();
//设置转换器支持的消息类型,这里支持的是json
list.add(MediaType.APPLICATION_JSON_UTF8);
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
//添加工程使用的消息转换器
converters.add(mappingJackson2HttpMessageConverter);
super.configureMessageConverters(converters);
}
按照上面注释以及上面链接的博文的说法,只需要注册一个纯字符串类型消息的转换器,并把这个转换器加入到工程内就行了。增加以下代码
@Bean
public StringHttpMessageConverter stringHttpMessageConverter() {
return new StringHttpMessageConverter();
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//字符串转换器
List<MediaType> listString = new ArrayList<MediaType>();
//字符串的消息类型为text/plain
listString.add(MediaType.TEXT_PLAIN);
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
stringHttpMessageConverter.setSupportedMediaTypes(listString);
//json转换器
List<MediaType> list = new ArrayList<MediaType>();
list.add(MediaType.APPLICATION_JSON_UTF8);
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list);
converters.add(mappingJackson2HttpMessageConverter);
converters.add(stringHttpMessageConverter);
super.configureMessageConverters(converters);
}
到这里还没结束,还需要在请求接口上加上产生的消息类型注解 produces = "text/plain", 这样消息才会与对应的转换器对应上处理。
@PostMapping(value = "/xxxPath",produces = "text/plain")
public String xxxMethod(@RequestBody ZZZ zzz) {
}
最后输出终于不带双引号了