HttpMediaTypeNotSupportedException: Content type 'application/json;' not supported 问题原因之一

方法配置:

@RequestMapping(value = "/check" ,method = RequestMethod.POST)
@ResponseBody
public Object check(@RequestBody A a) 

错误:

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported


网上看到有很多情况会导致这个问题,这里我说一下我这里的问题原因。

看Spring的源码:

protected <T> Object readWithMessageConverters(HttpInputMessage inputMessage, MethodParameter methodParam, Class<T> paramType) throws IOException,

HttpMediaTypeNotSupportedException {

MediaType contentType = inputMessage.getHeaders().getContentType();

if (contentType == null) {

    contentType = MediaType.APPLICATION_OCTET_STREAM;

}

for(HttpMessageConverter<?> messageConverter : this.messageConverters) {
    if (messageConverter.canRead(paramType, contentType)) {
        if (logger.isDebugEnabled()) {
            logger.debug("Reading [" + paramType.getName() + "] as \"" + contentType + "\" using [" + messageConverter + "]");
        }
        return ((HttpMessageConverter<T>) messageConverter).read(paramType, inputMessage);
    }
}
throw new HttpMediaTypeNotSupportedException(contentType, allSupportedMediaTypes);
}

 

public boolean canRead(Class<?> clazz, MediaType mediaType) {
    return supports(clazz) && canRead(mediaType);
}

经分析应该是canRead返回了false, 记得之前碰到一个问题是bean里面属性的get,set方法不规范导致json转换报错,后面检查代码发现,这次是同样的问题,在A里面引用了B类,B里面有一个属性c,有两个setC方法,参数不一样,是重载的方法,这个方法重载导致json转换不支持,然后canRead方法了false.

同样,如果你的bean里面有get或set方法,但是没有这个属性,比如你有一个getName方法,但是bean里面没有name这个属性,在转换json时也会报错。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值