ZPY博客

springMVC返回字符串时带了双引号的解决方法

最近在弄企业微信回调发现一个问题,就是springMVC接口返回的字符串带上了双引号。企业微信具体问题参照企业微信回调测试验证通过,但实际配置时验证不通过

造成这个问题的原因是,工程里加了ControllerAdvice统一处理返回结果,把结果都当成json来处理了,而json中默认会给字符串带上双引号。

解决方法就是加上StringHttpMessageConverter转换器,如果返回结果是String型,则走StringHttpMessageConverter这个转换器,其它类型,就走FastJsonHttpMessageConverter转换器。

注意:加入StringHttpMessageConverter时,必须放在FastJsonHttpMessageConverter前面。

配置如下:

@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter
{
    @Bean
    public FastJsonHttpMessageConverter fastJsonHttpMessageConverters() {
        //需要定义一个convert转换消息的对象;
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        //处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastMediaTypes.add(MediaType.TEXT_HTML);
        //在convert中添加配置信息.
        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.PrettyFormat,
                SerializerFeature.WriteMapNullValue);
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
        return fastJsonHttpMessageConverter;
    }

    @Bean
    public StringHttpMessageConverter stringHttpMessageConverter(){
        return new StringHttpMessageConverter(Charset.forName("UTF-8"));
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
    {
        converters.add(stringHttpMessageConverter());
        converters.add(fastJsonHttpMessageConverters());
    }

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters)
    {
        converters.clear();
        converters.add(stringHttpMessageConverter());
        converters.add(fastJsonHttpMessageConverters());
    }