当前位置: 首页 > 知识库问答 >
问题:

Swagger,jersey,jax-rs,嵌入式jetty配置问题

胡飞鹏
2023-03-14

我试图用嵌入式jetty服务器为生成的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()
"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",
}
  1. 这是swagger和jaxr的默认行为吗?
  2. 这是可配置的吗?
  3. 怎么做?

我认为我尝试将类/包加载到servlet的方式有问题。如本问题所述:swagger JSON文件上的Null值

欢迎提供任何提示。

谢谢你!

共有1个答案

华炜
2023-03-14

根据您使用的JSON序列化器,您需要以适当的方式配置null处理。

在杰克逊,它是由以下人员完成的:

@JsonInclude(JsonInclude.Include.NON_NULL)
class YourClass{
   ...
}

或者如果希望全局执行此行为,请配置ObjectMapper:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 类似资料:
  • 问题内容: 在详尽搜索了Web和Stackoverflow之后,我仍然坚持尝试找出如何将Jersey所提供的RESTlet风格界面与Jetty相集成的方法。 我的Jetty服务器已经启动并正在运行,因此Jersey也很容易使用,有人知道如何将两者结合在一起吗?任何具体的链接都会有所帮助- 我对servlet编程也很陌生。 问题答案: 我前一段时间使用Jetty和Jersey创建了一个应用程序。它实

  • 我们可以通过 实现创建JAX-RS示例。 为此,需要加载 jersey相关jar文件或使用Maven框架。 在这个例子中,我们使用jersey jar文件来实现JAX-RS jersey示例。 Jersey Jar文件下载网址:https://jersey.github.io/download.html 打开Eclipse,创建一个Web工程: restfuljersey,如下图所示 - JAX-

  • 我正在学习Jersey/JAX-RS,需要一些ExceptionMapper方面的帮助。 我有一个UserFacade类、AbstractFacade类和User类本身,它们都是非常标准的,主要是通过在NetBeans中创建一个新的Web服务RestFUL项目生成的。我的问题是,我想现在开始捕捉错误,比如“唯一约束违反”错误。我想我需要实现一个异常映射器...我的门面有以下内容: 这是我得到的错误

  • 我在加载Swagger UI/启用UIendpoint时遇到了一个问题。Maven项目,Jersey版本-2.12,Swagger版本-1.5.1-m2 我有一个通过编程配置的jersey web应用程序。在我的ResourceConfig(扩展)中,我为Swagger设置了以下内容: 我已经将Swagger UI dist的内容复制到我的web应用程序文件夹中。 当我点击http://local

  • 我正在重构一个遗留的Java代码库,以向泽西资源类提供Guice驱动的依赖注入。 这是一个精简的应用程序,它使用传统的Jetty/泽西设置(请参阅 我无法理解各种组件以及它们是如何协同工作的。因此,我不断得到以下错误: 如果我在< code>FooResource的构造函数中直接访问Guice注入器,它就会工作。这告诉我Jetty/Jersey的东西被正确地设置来服务资源,Guice能够正确地构建

  • 我有一个基本的REST web服务可以工作,但我确实有一个问题。下面是一个简短的代码片段。