Java Swagger、jersey、jax rs、嵌入式码头配置问题

Java Swagger、jersey、jax rs、嵌入式码头配置问题,java,swagger,jax-rs,jetty,Java,Swagger,Jax Rs,Jetty,不确定这是不是该问的地方。但我在文档或搜索引擎中找不到任何东西 我正试图为生成的swagger类设置一个小型服务器,并使用一个嵌入式jetty服务器。到目前为止,这适用于以下码头配置: ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/path"); QueuedThreadPool threa

不确定这是不是该问的地方。但我在文档或搜索引擎中找不到任何东西

我正试图为生成的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将它们返回为
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和JAXR的默认行为吗
  • 这是可配置的吗
  • 怎么做
  • 我认为我试图将类/包加载到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);