首页
学习
活动
专区
圈层
工具
发布

聊聊dubbo的DubboSwaggerService

本文主要研究一下dubbo的DubboSwaggerService

DubboSwaggerService

dubbo-2.7.2/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerService.java

代码语言:javascript
复制
@Path("dubbo")
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_JSON + "; " + "charset=UTF-8", MediaType.TEXT_XML + "; " + "charset=UTF-8"})
public interface DubboSwaggerService {
​
    @GET
    @Path("swagger")
    public Response getListingJson(@Context Application app, @Context ServletConfig sc,
                                   @Context HttpHeaders headers, @Context UriInfo uriInfo) throws JsonProcessingException;
}
  • DubboSwaggerService定义了getListingJson方法

DubboSwaggerApiListingResource

dubbo-2.7.2/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerApiListingResource.java

代码语言:javascript
复制
@Service
public class DubboSwaggerApiListingResource extends BaseApiListingResource implements DubboSwaggerService {
​
    @Context
    ServletContext context;
​
    @Override
    public Response getListingJson(Application app, ServletConfig sc,
                                   HttpHeaders headers, UriInfo uriInfo)  throws JsonProcessingException {
        Response response =  getListingJsonResponse(app, context, sc, headers, uriInfo);
        response.getHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHeaders().add("Access-Control-Allow-Headers", "x-requested-with, ssi-token");
        response.getHeaders().add("Access-Control-Max-Age", "3600");
        response.getHeaders().add("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS");
        return response;
    }
}
  • DubboSwaggerApiListingResource继承了swagger-jaxrs的BaseApiListingResource,同时实现了DubboSwaggerService接口;其实现的getListingJson方法首先调用父类的getListingJsonResponse获取response,然后往header里头添加了跨域设置

实例

dubbo-2.7.2/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerApiListingResourceTest.java

代码语言:javascript
复制
public class DubboSwaggerApiListingResourceTest {
​
    private Application app;
    private ServletConfig sc;
​
    @Test
    public void test() throws Exception {
​
        DubboSwaggerApiListingResource resource = new  DubboSwaggerApiListingResource();
​
        app = mock(Application.class);
        sc = mock(ServletConfig.class);
        Set<Class<?>> sets = new HashSet<Class<?>>();
        sets.add(SwaggerService.class);
​
        when(sc.getServletContext()).thenReturn(mock(ServletContext.class));
        when(app.getClasses()).thenReturn(sets);
​
        Response response = resource.getListingJson(app, sc,
                null, new ResteasyUriInfo(new URI("http://rest.test")));
​
        Assertions.assertNotNull(response);
        Swagger swagger = (Swagger)response.getEntity();
        Assertions.assertEquals("SwaggerService",swagger.getTags().get(0).getName());
        Assertions.assertEquals("/demoService/hello",swagger.getPaths().keySet().toArray()[0].toString());
    }
​
}
  • 这里验证resource.getListingJson返回的entity的swagger的path

小结

DubboSwaggerService定义了getListingJson方法;DubboSwaggerApiListingResource继承了swagger-jaxrs的BaseApiListingResource,同时实现了DubboSwaggerService接口;其实现的getListingJson方法首先调用父类的getListingJsonResponse获取response,然后往header里头添加了跨域设置

doc

举报
领券