Springboot日常:ClassCastException的原因竟然是没加ResponseBody

2 篇文章 0 订阅

在测试 /manage/user/login.do这一URL时,返回服务异常。

  • 阶段一

于是看日志

EXCEPTION信息:ResourceHttpRequestHandler cannot be cast to org.springframework.web.method.HandlerMethod,资源处理器不能被转换为方法处理器,定位到拦截器的强转出错,如下图。网上资料说要排除掉静态资源的请求,

但是这个请求URL/manage/user/login.do 不是静态资源,Spring为什么会用静态资源处理器来处理动态请求?

  • 阶段二

于是打印出URL,发现请求调用了两次,而且第二次的请求URL从/manage/user/login.do⇒/manage/user/manage/user/login.do,这里就明白了。因为Spring会把定位不到的请求都用静态资源处理器来处理。但为什么请求两次还是不明白。

把拦截器去了仍然调用两次,问题不在拦截器,试了试其他URL的方法的调用,都没有这一个问题。

  • 阶段三

经过方法对比,发现报错的方法上没有加@ResponseBody注解。

虽然原因还是不知道,加上该注解之后就对了。网上查@ResponseBody的详细解释,是说会把返回值放到响应体里,这里应该是因为方法的返回值没有被解析为json格式,也没有加入到响应体里,spring把这当作了一次重定向,而且把该url作为相对路径,于是前面加上绝对路径就重复了两遍。

最后建议大家把能加在类上的注解就不要放到方法上了,方法太多容易漏掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值