swagger, jersey, jax-rs, embedded jetty 配置问题
Swagger, jersey, jax-rs, embedded jetty configuration problem
不确定这里是否适合提问。但是我在文档中或搜索(引擎)中找不到任何内容。
我正在尝试使用嵌入式码头服务器为生成的 swagger 类 设置一个小型服务器。到目前为止,这适用于 Jetty 的以下配置:
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/path");
QueuedThreadPool threadPool = getThreadPool();
jettyServer = new Server(threadPool);
jettyServer.setHandler(context);
// Shutdown gracefully
jettyServer.setStopAtShutdown(true);
// Set time until server get killed.
// jettyServer.setStopTimeout(30);
// Add a http config and a connector to set the port manually
HttpConfiguration httpConfig = new HttpConfiguration();
ServerConnector http = new ServerConnector(jettyServer, new HttpConnectionFactory(httpConfig));
http.setPort(8080);
jettyServer.addConnector(http);
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
// Scans the package for new jersey controllers
jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES,
"ch.company.ilp.clag.server.api" + "," + "ch.company.ilp.clag.controller" + ", " + "io.swagger.jaxrs.listing");
jerseyServlet.setInitParameter("jersey.config.server.wadl.disableWadl", "true");
// Finally start the server
jettyServer.start();
对 API 的调用按预期工作。另外,我的“自定义过滤器”工作没有任何问题。
为了在正文中构建响应,我使用了以下代码:
// this object is annotated with the jackson annotations.
Response.status(Status.OK).entity(swaggerResponseObject).build()
我注意到当我没有在 swagger 对象中设置值时 API returns 它们作为 null
.
示例 json 响应:
回复:
"global_response": {
"result_state": "OK",
"result_message": "",
"result_code": "RESULT_STATE_OK",
"result_attributes": null,
"localizable_code": null
}
期望:
"global_response": {
"result_state": "OK",
"result_message": "",
"result_code": "RESULT_STATE_OK",
}
- 这是 swagger 和 jaxrs 的默认行为吗?
- 这是可配置的吗?
- 如何?
我认为我尝试将 类 / 包加载到我的 servlet 的方式有问题。正如这个问题中所描述的:
通过进一步搜索,我发现 SwaggerSerializers.writeTo() 从未被调用过。相反 ProviderBase.writeTo() 被调用。
包中没有 类:调用了 io.swagger.jaxrs.listing
。
欢迎任何提示。
谢谢!
根据您使用的 JSON 序列化程序,您需要以适当的方式配置空值处理。
在 jackson 中由以下人员完成:
@JsonInclude(JsonInclude.Include.NON_NULL)
class YourClass{
...
}
或者,如果您希望全局执行此行为,请配置您的 ObjectMapper:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
不确定这里是否适合提问。但是我在文档中或搜索(引擎)中找不到任何内容。
我正在尝试使用嵌入式码头服务器为生成的 swagger 类 设置一个小型服务器。到目前为止,这适用于 Jetty 的以下配置:
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/path");
QueuedThreadPool threadPool = getThreadPool();
jettyServer = new Server(threadPool);
jettyServer.setHandler(context);
// Shutdown gracefully
jettyServer.setStopAtShutdown(true);
// Set time until server get killed.
// jettyServer.setStopTimeout(30);
// Add a http config and a connector to set the port manually
HttpConfiguration httpConfig = new HttpConfiguration();
ServerConnector http = new ServerConnector(jettyServer, new HttpConnectionFactory(httpConfig));
http.setPort(8080);
jettyServer.addConnector(http);
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
// Scans the package for new jersey controllers
jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES,
"ch.company.ilp.clag.server.api" + "," + "ch.company.ilp.clag.controller" + ", " + "io.swagger.jaxrs.listing");
jerseyServlet.setInitParameter("jersey.config.server.wadl.disableWadl", "true");
// Finally start the server
jettyServer.start();
对 API 的调用按预期工作。另外,我的“自定义过滤器”工作没有任何问题。
为了在正文中构建响应,我使用了以下代码:
// this object is annotated with the jackson annotations.
Response.status(Status.OK).entity(swaggerResponseObject).build()
我注意到当我没有在 swagger 对象中设置值时 API returns 它们作为 null
.
示例 json 响应:
回复:
"global_response": {
"result_state": "OK",
"result_message": "",
"result_code": "RESULT_STATE_OK",
"result_attributes": null,
"localizable_code": null
}
期望:
"global_response": {
"result_state": "OK",
"result_message": "",
"result_code": "RESULT_STATE_OK",
}
- 这是 swagger 和 jaxrs 的默认行为吗?
- 这是可配置的吗?
- 如何?
我认为我尝试将 类 / 包加载到我的 servlet 的方式有问题。正如这个问题中所描述的:
通过进一步搜索,我发现 SwaggerSerializers.writeTo() 从未被调用过。相反 ProviderBase.writeTo() 被调用。
包中没有 类:调用了 io.swagger.jaxrs.listing
。
欢迎任何提示。
谢谢!
根据您使用的 JSON 序列化程序,您需要以适当的方式配置空值处理。
在 jackson 中由以下人员完成:
@JsonInclude(JsonInclude.Include.NON_NULL)
class YourClass{
...
}
或者,如果您希望全局执行此行为,请配置您的 ObjectMapper:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);