可能標題不是很准確,但是遇到的這個問題確實比較坑。下面來描述一下項目場景:
今天在開發的過程中遇到了兩次這種問題:
我的控制層是:
@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; } }
重啟項目,即可解決問題。
