首页 > 编程语言 > 详细

解决SpringMvc进入两次Controller,自动重定向一次的问题

时间:2020-07-21 12:42:20      阅读:154      评论:0      收藏:0      [点我收藏+]

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

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

我的控制层是:

@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;
    }
}

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

 

解决SpringMvc进入两次Controller,自动重定向一次的问题

原文:https://www.cnblogs.com/phdeblog/p/13353540.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!