记录SpringMVC 接口开发 在拦截器中使用response返回json 响应出现404问题

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringMVC ,可以使用拦截(Interceptor)来对请求进行拦截和处理。拦截可以在请求被处理前或处理后对其进行拦截,并进行一些处理。 如果需要在拦截获取 Controller 返回响应结果,可以使用 Spring 提供的 postHandle 方法。该方法会在 Controller 方法执行完成后被调用,可以获取到 Controller 方法返回的 ModelAndView 对象。 在 postHandle 方法,可以通过将 ModelAndView 对象转换为 HttpServletResponse 对象,从而获取到返回给客户端的响应内容。示例代码如下: ``` @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 判断是否有返回结果 if(modelAndView != null) { // 获取返回的视图名称 String viewName = modelAndView.getViewName(); // 获取返回的模型数据 Map<String, Object> model = modelAndView.getModel(); // 将 ModelAndView 转换为 HttpServletResponse 对象 ServletOutputStream outputStream = response.getOutputStream(); // 获取响应内容 String content = outputStream.toString(); // 进行处理 } } ``` 需要注意的是,拦截只能获取到 Controller 返回的 ModelAndView 对象,而无法获取到 Controller 方法直接返回的结果。如果需要获取直接返回的结果,可以在 Controller 方法使用 @ResponseBody 注解将返回值转换为 JSON 格式,然后在拦截进行解析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值