@ResponseBody注解支持的json包

起因,@ResponseBody注解在引用FastJson包的情况下失效。考虑到@ResponseBody只支持Jackson,故去看一看源码是如何调用的
查看注解扫描源码<mvc:annotation-driven/>
这里写图片描述
进入RequestMappingHandlerAdapter中查看
这里写图片描述
会发现构造器中引入诸多HttpMessageConverter,其中还有AllEncompassingFormHttpMessageConverter,进入查看

public class AllEncompassingFormHttpMessageConverter extends FormHttpMessageConverter {
    private static final boolean jaxb2Present = ClassUtils.isPresent("javax.xml.bind.Binder", AllEncompassingFormHttpMessageConverter.class.getClassLoader());
    private static final boolean jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", AllEncompassingFormHttpMessageConverter.class.getClassLoader()) && ClassUtils.isPresent("com.fasterxml.jackson.core.JsonGenerator", AllEncompassingFormHttpMessageConverter.class.getClassLoader());
    private static final boolean jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", AllEncompassingFormHttpMessageConverter.class.getClassLoader());
    private static final boolean gsonPresent = ClassUtils.isPresent("com.google.gson.Gson", AllEncompassingFormHttpMessageConverter.class.getClassLoader());

    public AllEncompassingFormHttpMessageConverter() {
        this.addPartConverter(new SourceHttpMessageConverter());
        if(jaxb2Present && !jackson2XmlPresent) {
            this.addPartConverter(new Jaxb2RootElementHttpMessageConverter());
        }

        if(jackson2Present) {
            this.addPartConverter(new MappingJackson2HttpMessageConverter());
        } else if(gsonPresent) {
            this.addPartConverter(new GsonHttpMessageConverter());
        }

        if(jackson2XmlPresent) {
            this.addPartConverter(new MappingJackson2XmlHttpMessageConverter());
        }

    }
}

可以发现默认其支持Jackson和Gson,并不支持FastJson
源码基于spring4.3.10

另外,在所支持的json中已配置默认字符集为utf-8
查看GsonHttpMessageConverter构造器
这里写图片描述
查看MappingJackson2HttpMessageConverter构造器
这里写图片描述
其调用了父类的构造器,再去看父类里面看
这里写图片描述
可以看见默认字符集都是utf-8

如果不使用所支持的Jackson和Gson,则需要注意字符集的问题
可在@RequestMapping注解中使用produces来配置charset
@RequestMapping(value = "demo", produces = "application/json;charset=utf-8")

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值