gpt4 book ai didi

java - 为什么我的 swagger.json 是空的? - RestEasy,Wildfly 上的 Java

转载 作者:行者123 更新时间:2023-12-04 11:34:30 27 4
gpt4 key购买 nike

我正在努力让 swagger 工作来记录我使用 RestEasy 创建的 API。

我遵循了可用的文档 here ,尽可能接近。

我有:

  • 向 pom.xml 添加了 swagger。

  •     <dependency>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-jaxrs</artifactId>
    <version>1.5.0</version>
    </dependency>

  • 使用resteasy自动扫描,这意味着这存在于我的web.xml中,我有值为“true”的上下文参数“resteasy.scan”。

  • <context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
    </context-param>

  • 我已经告诉 swagger 我的 API 在哪里,并通过在我的 web.xml 中添加一个 servlet 来设置基本路径

  • <servlet>
    <servlet-name>Jersey2Config</servlet-name>
    <servlet-class>io.swagger.jaxrs.config.DefaultJaxrsConfig</servlet-class>
    <init-param>
    <param-name>api.version</param-name>
    <param-value>1.0.0</param-value>
    </init-param>
    <init-param>
    <param-name>swagger.api.basepath</param-name>
    <param-value>http://localhost:8080/mygiftlist/rest</param-value>
    </init-param>

    <init-param>
    <param-name>swagger.api.resourcePackage</param-name>
    <param-value>com.jetnuts.rest</param-value>
    </init-param>

    <load-on-startup>2</load-on-startup>
    </servlet>


    我确实有几个工作端点
    localhost:8080/mygiftlist/rest 

    这些都是从“com.jetnuts.rest”包中设置的。

    但是,问题是,当我访问时:
    http://localhost:8080/mygiftlist/rest/swagger.json

    我得到的只是一个空的 API:
    {"swagger":"2.0","info":{"version":"1.0.0","title":""},"host":"localhost:8080","basePath":"/mygiftlist/rest","schemes":["http"]}

    有谁知道为什么这不会在包中提取端点?我已经测试了端点,它们都可以工作。

    例如,我在 (com.jetnuts.rest) 中有:
    /**
    * Created by steve on 13/12/2015.
    */
    @Path("/giftlists")
    @RequestScoped
    public class GiftListResourceRESTService {

    @Inject
    CrudService dao;

    /**
    * Create a new list
    * @param giftList The gift list to create
    * @return A created response, or an error if the incorrect format is given.
    */
    @POST
    @Path("/")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createGift(GiftList giftList) {
    dao.create(giftList);
    try {
    URI resourceURI = new URI("/giftlists/" + giftList.getId());
    return Response.created(resourceURI).build();
    }catch(URISyntaxException e){
    return Response.serverError().build();
    }
    }
    }

    此端点工作并按预期添加到数据库中,但它没有显示在 swagger json 中。

    为了完整起见,我的“应用程序”类如下所示:
    @ApplicationPath("/rest")
    public class JaxRsActivator extends Application {

    public JaxRsActivator(){

    }
    }



    最后它起作用了,但我不知道为什么?

    将 servlet 从 web.xml 中移出并将其添加到“应用程序”后,它就可以工作了。我仍然不知道这是为什么:
        public JaxRsActivator(){
    BeanConfig beanConfig = new BeanConfig();
    beanConfig.setVersion("1.0.2");
    beanConfig.setSchemes(new String[]{"http"});
    beanConfig.setHost("localhost:8080");
    beanConfig.setBasePath("/rest/");
    beanConfig.setResourcePackage("com.jetnuts.rest");
    beanConfig.setScan(true);
    }

    @Override
    public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new HashSet();

    resources.add(io.swagger.jaxrs.listing.ApiListingResource.class);
    resources.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);

    return resources;
    }

    最佳答案

    一个很老的问题,但是我今天遇到了同样的问题。建议的解决方案有效,但可能

  • 您应该阅读 [1] 处的整个 Swagger JAX-RS 设置文档
  • 您不需要任何 web.xml ,您可以在没有它的情况下执行所有 JAX-RS。 web.xml它很“老式”
  • 您不需要该方法 getClasses()在您的 JaxRsActivator ,默认情况下,JAX-RS 会扫描您发现 Web 服务的所有类。这个文件中的重点是定义一个 BeanConfig .
  • 您应该使用注释记录您的 GiftListResourceRESTService 方法,请参阅 [2]

  • [1] https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-RESTEasy-2.X-Project-Setup-1.5
    [2] https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations#quick-annotation-overview

    关于java - 为什么我的 swagger.json 是空的? - RestEasy,Wildfly 上的 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34295580/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com