首先说下事情的起因,新开了一个项目给app做接口服务,使用框架SSM, 应为接口用到了签名, 就是时间戳,随机数,appId, appKey等保证接口安全, 这个就不多说了, 主要是在接口和返回是都要传递json字符串数据, 于是使用了拦截器,
拦截器的三个函数使用了两个 一个是preHandle接收时校验签名, 一个是afterCompletion响应时对响应数据签名然后返回json格式,
问题出在响应时


这样看来一点问题也没有, controller这么写的

这样就出现了问题 在响应是说找不到路径
WARN PageNotFound.noHandlerFound:1147 - No mapping found for HTTP request with URI [/olcarapi/api/api/test1111] in DispatcherServlet with name 'dispatcher'发现request with URI [/olcarapi/api/api/test1111] ,
多了路径上的@RequestMapping("/api") 有两个/api
终于找到了原因
如果controller返回值是void Spring MVC会认为@RequestMapping注解中指定的路径就是要返回的视图name
解决办法是 在方法里定义HttpServletResponse 参数 这样spring就不会取path为视图名字了

解决办法2, 不定义response参数 在spring-mvc.xml中定义视图解析器, 也可以解决这个问题
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="1"></property>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
本文介绍了一个使用SSM框架开发接口服务时遇到的问题:接口响应时出现路径错误导致无法正常工作。通过分析发现原因是控制器返回类型为void时,Spring MVC将@RequestMapping路径误认为视图名称。
6517

被折叠的 条评论
为什么被折叠?



