使用Grizzly servlet容器

时间:2018-04-23 08:33:37

标签: java jackson jersey grizzly

我通过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)

1 个答案:

答案 0 :(得分:1)

创建服务器时,需要创建一个不会立即启动的方式,否则您将无法对其进行配置。要执行此操作,只需使用允许您传递GrizzlyHttpServerFactory.createHttpServer(...)作为最后一个参数的boolean重载。值false告诉服务器不要立即启动。

HttpServer server = GrizzlyHttpServerFactory.createHttpServer(
                           URI.create(BASE_URI), resourceConfig, false);
server.getServerConfiguration().setAllowPayloadForUndefinedHttpMethods(true);
server.start();