当前位置: 首页 > 知识库问答 >
问题:

如何处理Spring Boot重定向到/错误?

太叔栋
2023-03-14

我也不明白他们为什么要把它重定向到/error。而且很有可能是我少了什么,因为我只能把404S或200还给客户。

我的问题是他的解决方案似乎不适合1.3.0,因此我有以下请求流:假设我的代码抛出了一个NullPointerException。它将由我的ExceptionMapper之一处理

@Provider
public class GeneralExceptionMapper implements ExceptionMapper<Throwable> {

    private static final Logger LOGGER = LoggerFactory.getLogger(GeneralExceptionMapper.class);

    @Override
    public Response toResponse(Throwable exception) {
        LOGGER.error(exception.getLocalizedMessage());
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build();
    }
}

我的代码返回一个500,但它没有将它发送回客户机,而是尝试将它重定向到/error。如果我没有其他资源,它就会发回404。

2015-12-16 18:33:21.268  INFO 9708 --- [nio-8080-exec-1] o.glassfish.jersey.filter.LoggingFilter  : 1 * Server has received a request on thread http-nio-8080-exec-1
1 > GET http://localhost:8080/nullpointerexception
1 > accept: */*
1 > host: localhost:8080
1 > user-agent: curl/7.45.0

2015-12-16 18:33:29.492  INFO 9708 --- [nio-8080-exec-1] o.glassfish.jersey.filter.LoggingFilter  : 1 * Server responded with a response on thread http-nio-8080-exec-1
1 < 500

2015-12-16 18:33:29.540  INFO 9708 --- [nio-8080-exec-1] o.glassfish.jersey.filter.LoggingFilter  : 2 * Server has received a request on thread http-nio-8080-exec-1
2 > GET http://localhost:8080/error
2 > accept: */*
2 > host: localhost:8080
2 > user-agent: curl/7.45.0

2015-12-16 18:33:37.249  INFO 9708 --- [nio-8080-exec-1] o.glassfish.jersey.filter.LoggingFilter  : 2 * Server responded with a response on thread http-nio-8080-exec-1
2 < 404
$ curl -v http://localhost:8080/nullpointerexception
* STATE: INIT => CONNECT handle 0x6000572d0; line 1090 (connection #-5000)
* Added connection 0. The cache now contains 1 members
*   Trying ::1...
* STATE: CONNECT => WAITCONNECT handle 0x6000572d0; line 1143 (connection #0)
* Connected to localhost (::1) port 8080 (#0)
* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x6000572d0; line 1240 (connection #0)
* STATE: SENDPROTOCONNECT => DO handle 0x6000572d0; line 1258 (connection #0)
> GET /nullpointerexception HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.45.0
> Accept: */*
>
* STATE: DO => DO_DONE handle 0x6000572d0; line 1337 (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x6000572d0; line 1464 (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x6000572d0; line 1474 (connection #0)
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 404 Not Found
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< Content-Length: 0
< Date: Wed, 16 Dec 2015 17:33:37 GMT
<
* STATE: PERFORM => DONE handle 0x6000572d0; line 1632 (connection #0)
* Curl_done
* Connection #0 to host localhost left intact

共有1个答案

怀刚毅
2023-03-14

您可以将Jersey属性serverproperties.response_set_status_over_send_error设置为true

只要响应状态为4xx5xx,就可以在特定于容器的响应实现上在senderrorsetstatus之间进行选择。例如。在servlet容器上,Jersey可以调用HttpServletResponse.SetStatus(...)HttpServletResponse.SenderRor(...)

调用senderror(...)方法通常会重置实体、响应头并为指定的状态代码(例如servleterror-page配置)提供错误页。但是,如果要对响应进行后处理(例如,通过servlet过滤器),唯一的方法是在容器响应对象上调用setstatus(...)

如果属性值为true,则Response.SetStatus(...)方法将用于默认值Response.SenderRror(...)

属性值的类型为boolean。默认值为false

您可以简单地通过在ResourceConfig子类构造函数中调用属性(key,value)来设置Jersey属性。

 类似资料:
  • 问题内容: 我已经在托管jenkins和其他一些应用程序的ubuntu实例上将nginx设置为反向代理。我正在使用nginx根据相对路径路由到各种应用程序。从客户端到nginx的所有流量都通过https。在防火墙后面,nginx将所有内容通过http路由到配置的路径和端口号。看起来像这样: Nginx配置文件的相关部分是这样的: 问题是jenkins使用简单的身份验证,并且在成功登录后会发送302

  • 问题内容: 我正在将一些数据发布到正在回答302移动临时的服务器上。 我希望HttpClient遵循重定向并自动获取新位置,因为我相信这是HttpClient的默认行为。但是,我得到一个例外,而不是按照重定向:( 这是相关的代码,任何想法都将不胜感激: 问题答案: HttpClient的默认行为符合HTTP规范(RFC 2616)的要求 您可以通过子类化DefaultRedirectStrateg

  • 11.7. 处理重定向 你可以使用两种不同的自定义 URL 头信息来处理永久重定向和临时重定向。 首先, 让我们来看看重定向处理的必要性。 例 11.10. 没有重定向处理的情况下,访问 web 服务 >>> import urllib2, httplib >>> httplib.HTTPConnection.debuglevel = 1 >>> request = url

  • 问题内容: 我遇到了与这个问题相同的问题 ,使用了Spring Boot1.3.0,而我的控制器没有用,just 和。正如该问题中的操作人员所说, 对我来说,这不是明智的选择 我也无法理解为什么他们会将其重定向到/ error。而且 很可能我遗漏了一些东西 ,因为我只能将404或200s退还给客户端。 我的问题是他的解决方案似乎不适用于1.3.0,因此我有以下请求流程:假设我的代码抛出。由我的一位

  • 我在我的应用程序上安装了一个服务工作者,它安装得很好,激活得很好,缓存也可以。 但当我点击302页面时,缓存完成后,它会告诉我: http://localhost:8000/form/的Fetch事件导致网络错误响应:重定向响应用于重定向模式不是“跟随”的请求。 我已经读了很多关于这个主题的文章,我在这里查阅了一些帖子:服务人员破坏301重定向,还有那里https://github.com/w3c

  • 问题内容: 从上一页收集到数据后,我想向客户显示另一页。但是我在服务器端重定向新URL时遇到麻烦。这是我的逻辑: 将带有POST操作的用户输入提交给服务器; 服务器运行函数saveChoice()将用户输入保存到数据库中; 保存用户输入后,服务器将新的URL发送给客户端。 当客户端获取新URL时,服务器读取数据库并取出保存的数据 我坚持执行第3步(这里是流程示例): 这是模板: 我可以知道如何重定