【问题标题】:How to send the send status code as response for 404 instead of 404.jsp as a html reponse in spring?如何在春季将发送状态代码作为 404 的响应而不是 404.jsp 作为 html 响应发送?
【发布时间】:2014-12-30 22:57:33
【问题描述】:

我在 Spring 中创建了 Web 应用程序并处理了 404 和 500 的异常映射。如果系统找不到请求的 URL 的任何资源,它会重定向到自定义 404.jsp 而不是常规的 404 页面。一切正常,直到决定添加在我的应用程序中添加了一个 Web 服务。我已经将一个控制器作为 Web 服务包含在内,这个控制器没有视图,需要通过 curl 命令调用。

用户可能会更改 curl 脚本。如果他们更改了 URL,它应该显示 404 状态代码。但它会将自定义 404.jsp 作为 html 响应而不是状态代码返回。因为调度程序 servlet 将使用 / *.

我该如何解决这个问题?

请分享您的建议。

【问题讨论】:

标签: spring rest spring-mvc http-status-code-404 response


【解决方案1】:

Spring 3.2 引入了@ControllerAdvice,并在文档中提到:

一般用于定义@ExceptionHandler

这意味着您可以使用@ControllerAdvice 来协助您的@Controller,如下所示:

@ControllerAdvice
class GlobalControllerExceptionHandler {
    @ResponseStatus(HttpStatus.NOT_FOUND)  // 404
    @ExceptionHandler(Exception.class)
    public void handleNoTFound() {
        // Nothing to do
    }
}

更多详情请参考this tutorialthis answer

【讨论】:

  • 很好。但是这里的一些 url 属于这个系统的应用程序应该显示自定义错误页面作为视图。剩余的 url 需要充当 web 服务,它应该在 404 发生时返回状态码,而不是给出 html 内容作为响应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多