我通过Postman测试我的REST API,有一些虚拟请求,我注意到当DELETE请求意外地有一个消息体时,服务器总是返回状态码为400(并且没有消息)。我知道GET和DELETE请求不应该有有效负载,但我更喜欢消息体被忽略,或者我可以在ContainerRequestFilter
的帮助下返回我的自定义错误消息。 (在使用RequestFilter解析请求之前返回Bad Request
奇怪的是,我已经将Grizzly配置为允许server.getServerConfiguration().setAllowPayloadForUndefinedHttpMethods(true);
(在启动服务器之前),并且我记得,过去这有效。我不知道发生了什么变化......我仍在我的父母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>
和子模块:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
我搜索了我的项目,但我没有触及其他地方的ServerConfiguration
。
我改变了我的JSON提供程序,也许这与它有关?我从Grizzly默认的Moxy转到了定制的Jackson JSON提供商。如果需要,我可以显示自定义JacksonJaxbJsonProvider
。什么可以覆盖setAllowPayloadForUndefinedHttpMethods(true)
?
答案 0 :(得分:1)
创建服务器时,需要创建一个不会立即启动的方式,否则您将无法对其进行配置。要执行此操作,只需使用允许您传递GrizzlyHttpServerFactory.createHttpServer(...)
作为最后一个参数的boolean
重载。值false
告诉服务器不要立即启动。
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(
URI.create(BASE_URI), resourceConfig, false);
server.getServerConfiguration().setAllowPayloadForUndefinedHttpMethods(true);
server.start();