zoukankan      html  css  js  c++  java
  • 解决SpringMvc进入两次Controller,自动重定向一次的问题

    可能标题不是很准确,但是遇到的这个问题确实比较坑。下面来描述一下项目场景:

    今天在开发的过程中遇到了两次这种问题:

    我的控制层是:

    @RestController
    @RequestMapping("/front/task")
    public class TaskController {

    访问其中的一个接口:

        @RequestMapping("/taskAction")
        public RestResult doTaskAction(@Valid  @RequestBody TaskDao taskDao){
            RestResult result = new RestResult();
    
            //todo
            return result;
        }

    其中有个传参校验,当传参检验不通过的时候,直接报404:

    No mapping found for HTTP request with URI [/front/task/front/task/taskAction] in DispatcherServlet with name 'spring'

    很奇怪,springmc多转发了一次。

    再检查过springmvc的若干配置,经历了一番周折之后,终于发现了问题所在:

    @ControllerAdvice
    public class GlobalExceptionHandler {
    
    
        @ExceptionHandler(Exception.class)
        @ResponseStatus(HttpStatus.OK)
        public RestResult handlerException(HttpServletRequest request, Exception e){
            RestResult result = new RestResult();
            result.fail(e.getMessage());
            System.out.println(e.getMessage());
            return result;
        }
    }

    全局异常捕捉类返回的时候没有指定@ResponseBody,springmvc解析不出来RestResult,只好在路径的后面又加上了“/fornt/task”。

    正确的写法如下:

    @ControllerAdvice
    public class GlobalExceptionHandler {
    
    
        @ExceptionHandler(Exception.class)
        @ResponseBody
        @ResponseStatus(HttpStatus.OK)
        public RestResult handlerException(HttpServletRequest request, Exception e){
            RestResult result = new RestResult();
            result.fail(e.getMessage());
            System.out.println(e.getMessage());
            return result;
        }
    }

    重启项目,即可解决问题。

  • 相关阅读:
    MVC系列14-后台我的文章页
    MVC系列-13.前台文章显示页
    MVC系列-12.项目的重新规划
    MVC系列-11.两表联合-发表文章
    MVC系列-10.用户验证-导航条改造
    百思不得姐第4天:文本框占位文字颜色
    swift学习:自定义Log
    swift学习第十六天:懒加载和tableView
    swift学习第十五天:闭包
    swift学习第十四天:属性监听器
  • 原文地址:https://www.cnblogs.com/phdeblog/p/13353540.html
Copyright © 2011-2022 走看看