使用 Grizzly servlet 容器允许带有消息正文的 DELETE 请求
Allow DELETE requests with message body, using Grizzly servlet container
我正在通过 Postman 测试我的 REST API,有一些虚拟请求,我注意到当 DELETE 请求不小心有一个消息正文时,服务器总是 return 状态代码 400(并且没有消息)。我知道 GET 和 DELETE 请求不应该有负载,但我更愿意忽略消息正文,或者我可以 return 我的自定义错误消息 ContainerRequestFilter
。 (Bad Request
在我可以使用 RequestFilter 解析请求之前被 returned)
奇怪的是,我已经将 Grizzly 配置为使用 server.getServerConfiguration().setAllowPayloadForUndefinedHttpMethods(true);
允许这样做(在启动服务器之前),据我所知,在过去这行得通。我不确定发生了什么变化......我仍然在我的 parent pom.xml
:
中使用 Jersey 的这种依赖
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<jersey.version>2.23.1</jersey.version>
并在 child 模块中:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
我已经搜索了我的项目,但我没有触及 ServerConfiguration
其他任何地方。
我更换了 JSON 供应商,也许这与它有关?我从 Grizzly 默认的 Moxy 转到了自定义的 Jackson JSON 提供程序。如果需要,我可以显示自定义 JacksonJaxbJsonProvider
。什么可以在这里覆盖 setAllowPayloadForUndefinedHttpMethods(true)
?
创建服务器时,需要以不会立即启动的方式创建,否则无法配置。为此,只需使用 GrizzlyHttpServerFactory.createHttpServer(...)
的重载,它允许您将 boolean
作为最后一个参数传递。值 false
告诉服务器不要立即启动。
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(
URI.create(BASE_URI), resourceConfig, false);
server.getServerConfiguration().setAllowPayloadForUndefinedHttpMethods(true);
server.start();
我正在通过 Postman 测试我的 REST API,有一些虚拟请求,我注意到当 DELETE 请求不小心有一个消息正文时,服务器总是 return 状态代码 400(并且没有消息)。我知道 GET 和 DELETE 请求不应该有负载,但我更愿意忽略消息正文,或者我可以 return 我的自定义错误消息 ContainerRequestFilter
。 (Bad Request
在我可以使用 RequestFilter 解析请求之前被 returned)
奇怪的是,我已经将 Grizzly 配置为使用 server.getServerConfiguration().setAllowPayloadForUndefinedHttpMethods(true);
允许这样做(在启动服务器之前),据我所知,在过去这行得通。我不确定发生了什么变化......我仍然在我的 parent pom.xml
:
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<jersey.version>2.23.1</jersey.version>
并在 child 模块中:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
我已经搜索了我的项目,但我没有触及 ServerConfiguration
其他任何地方。
我更换了 JSON 供应商,也许这与它有关?我从 Grizzly 默认的 Moxy 转到了自定义的 Jackson JSON 提供程序。如果需要,我可以显示自定义 JacksonJaxbJsonProvider
。什么可以在这里覆盖 setAllowPayloadForUndefinedHttpMethods(true)
?
创建服务器时,需要以不会立即启动的方式创建,否则无法配置。为此,只需使用 GrizzlyHttpServerFactory.createHttpServer(...)
的重载,它允许您将 boolean
作为最后一个参数传递。值 false
告诉服务器不要立即启动。
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(
URI.create(BASE_URI), resourceConfig, false);
server.getServerConfiguration().setAllowPayloadForUndefinedHttpMethods(true);
server.start();