首先说下事情的起因,新开了一个项目给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>