java – 如何在返回Response时在Jersey WADL中包含类型

情况

我有一个返回User对象的Jersey 2.18 API端点.我的利益相关者需要API来生成WADL文件,该文件不仅反映API路径,还反映返回的对象类型.

通过使用以下端点定义,截至2015年,泽西开箱即用:

@GET
@Path("/")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public User getExampleUser() {
    User exampleUser = new User();
    return exampleUser;
}

由jersey生成的WADL文件正确包含端点以及返回类型:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
    <doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.18 2015-06-05 02:28:21"/>
    <doc xmlns:jersey="http://jersey.java.net/" jersey:hint="This is simplified WADL with user and core resources only. To get full WADL with extended resources use the query parameter detail. Link: http://localhost:8080/example/api/v3/application.wadl?detail=true"/>
    <grammars>
        <include href="application.wadl/xsd0.xsd">
            <doc title="Generated" xml:lang="en"/>
        </include>
    </grammars>
    <resources base="http://localhost:8080/example/api/v3/">
        <resource path="/">
            <method id="getExampleUser" name="GET">
                <request>
                </request>
                <response>
                    <ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="user" mediaType="application/json"/>
                    <ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="user" mediaType="application/xml"/>
                </response>
            </method>
        </resource>    
    </resources>
</application>

但是大多数Jersey社区似乎都有端点返回一个更通用的Response对象,它允许各种各样的好东西,包括E-TAG caching,HTTP状态代码操作,error messaging等等.

例如:

@GET
@Path("/")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response getExampleUser()  {
    User exampleUser = new User();
    return Response.ok(exampleUser).build();
}

生成的WADL看起来相同,但响应部分现在没有显示返回类型和模式的证据.

<response>
    <representation mediaType="application/json"/>
    <representation mediaType="application/xml"/>
</response>

我的问题

是否可以从丰富的自动生成的WADL文件中受益,同时还能够让我的端点返回更灵活的Response对象?

或者,如何在仍然从端点定义返回特定对象类型的同时处理重定向,缓存和其他基本API功能?

最佳答案 我有完全相同的问题,并能够像这样解决它:

>我的所有实体都必须使用@XmlRootElement注释并发送到虚拟休息端点,以便它们显示在application.wadl / xsd0.xsd中.
>我在项目中包含了Swagger,并用它来生成包含响应代码和响应对象的文档.
>然后我运行了现有的wadl生成工具application.wadl.
>最后一步是编写一个方法,将Swagger文件中的响应代码和对象插入到wadl文件中.

最后三个步骤放在一个休息服务中.结果是通过调用其余服务自动生成wadl,您可以像以前一样继续使用Response.

点赞