0

我想在我的应用引擎应用程序中处理错误 400。

我可以使用以下代码处理 404 错误:

@RequestMapping("/**")
public void unmappedRequest(HttpServletRequest request) {
    request.getRequestURI();
    String uri = request.getRequestURI();
    throw new UnknownResourceException("There is no resource for path "
    + uri);
}

然后我管理 404 错误。

但是,对于 400 错误(错误请求),我尝试了以下操作:

在 web.xml 中

  <error-page>
    <error-code>400</error-code>
    <location>/error/400</location>
  </error-page>

然后在我的控制器中

@RequestMapping("/error/400")
public void badRequest(HttpServletRequest request) {
    request.getRequestURI();
    String uri = request.getRequestURI();
    throw new UnknownResourceException("bad request for path " + uri);
}

但它不起作用,所以当我提出错误请求时,我会从应用引擎获取默认错误屏幕。
有什么建议么?

4

2 回答 2

3

我最终得到的最简单和最快的解决方案是做这样的事情:

@ControllerAdvice
public class ControllerHandler {

    @ExceptionHandler(MissingServletRequestParameterException.class)
    public String handleMyException(Exception exception,
        HttpServletRequest request) {
    return "/error/myerror";
    }
}

这里的关键是处理org.springframework.web.bind。MissingServletRequestParameterException ;

其他替代方案,也可以通过 web.xml 完成,如下所示:

<error-page>
    <exception-type>org.springframework.web.bind.MissingServletRequestParameterException</exception-type>
    <location>/WEB-INF/error/myerror.jsp</location>
</error-page>
于 2013-09-03T00:58:08.597 回答
2

入口

<error-page>
    <error-code>400</error-code>
    <location>/error/400</location>
</error-page>

导致 servlet 容器RequestDispatcher#forwardlocation元素生成 a。这不会映射到 a @Controller,而是映射到 servlet(url 映射)或 jsp 或其他。

使用@ExceptionHandler. 有关示例(带有特定例外),请参见此处

于 2013-08-31T15:05:42.843 回答