我遵循了这个示例swagger configuration,但是无论我传递给{{1的是什么,但我都希望将swagger根(swagger.json的提供路径)设置为<jersey-context-root>/api-or-some-other-path
}}粗大的根始终是application.yml文件中定义的j ersey应用上下文根,即config.setBasePath(some-sub-path);
,因此看来 basePath 很难有线。
答案 0 :(得分:1)
查看您的链接和代码
this.register(ApiListingResource.class);
ApiListingResource
是为swagger.json
端点服务的实际资源类。如果您查看链接,则可以看到该类带有路径注释({type:json|yaml}
决定了将返回数据的类型)。
@Path("/swagger.{type:json|yaml}")
如果要更改路径,则需要进行其他注册。您需要做的是使用Resource.builder(ResourceClass)
方法来获得一个构建器,我们可以在其中更改路径。例如,您可以执行以下操作。
Resource swaggerResource = Resource.builder(ApiListingResource.class)
.path("foobar/swagger.{type:json|yaml}")
.build();
然后使用ResourceConfig#register()
方法代替ResourceConfig#registerResource(Resource)
方法。
this.registerResource(swaggerResource);
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.model.Resource;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ResourceBuilderTest extends JerseyTest {
@Path("/swagger.{type:json|yaml}")
public static class ApiListingResource {
@GET
@Produces("text/plain")
public String get() {
return "Hello World!";
}
}
@Override
public ResourceConfig configure() {
Resource swaggerResource = Resource.builder(ApiListingResource.class)
.path("foobar/swagger.{type:json|yaml}")
.build();
ResourceConfig config = new ResourceConfig();
config.registerResources(swaggerResource);
return config;
}
@Test
public void testIt() {
Response response = target("foobar/swagger.json")
.request()
.get();
String data = response.readEntity(String.class);
System.out.println(data);
assertEquals("Hello World!", data);
}
}