泽西岛的JSON模式生成

因此,在一篇文章中,我讨论了一个允许在WADL中使用JSON-Schema的建议,这篇文章探讨了如何使它与最近构建的Jersey一起使用。 在1.16发布之前,您将必须下载/参考1.16SNAPSHOT。

如果您使用的是Maven,那么假设您已经有了jersey和jersey-json,那么更新依赖项应该很简单。 您只需要添加对“ com.sun.jersey.contribs”组中“ jersey-wadl-json-schema”伪像的依赖关系,即可获得新功能。

如果您不在Maven之外,最简单的方法是下载最新的jersey-archive ,然后下载jersey-wadl-json-schema jar。 如何部署这些是特定于工具的,但是,如果您使用的是WLS,则以下是有关如何升级Jersey版本的一些特定说明

完成此工作后,需要创建WadlGeneratorConfig类以启用此新的语法生成:

package jersey;

import com.sun.jersey.api.wadl.config.WadlGeneratorConfig;
import com.sun.jersey.api.wadl.config.WadlGeneratorDescription;
import com.sun.jersey.wadl.generators.json.WadlGeneratorJSONGrammarGenerator;

import java.util.List;

public class JsonGeneratorConfig extends WadlGeneratorConfig {

    @Override
    public List

               configure() {
        return generator(WadlGeneratorJSONGrammarGenerator.class).descriptions();
    }
}

然后可以通过多种方式进行注册,这是使用servlet初始化参数的示例。 还要注意,为了使这个示例简单,我们使用Jersey POJO映射; 但是在撰写此博客时,我注意到该设置会影响WADLJSON版本的格式,以防您尝试这样做。

<?xml version = '1.0' encoding = 'ISO-8859-1'?>
<web-app xmlns='http://java.sun.com/xml/ns/javaee' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
         xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd'
         version='3.0'>
  <servlet>
    <servlet-name>jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.WadlGeneratorConfig</param-name>
      <param-value>jersey.JsonGeneratorConfig</param-value>
    </init-param>
    <init-param>
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/resources/*</url-pattern>
  </servlet-mapping>
</web-app>

因此,我整理了一个非常简单的echo服务,只是为了检查它是否正常工作:

package jersey;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path('/echo')
public class EchoResource {

    @GET
    @Produces('application/json')
    public EchoBean echo() {
        EchoBean bean = new EchoBean();
        bean.setMessage('Hello');
        return bean;
    }

    @POST
    @Consumes('application/json')
    @Produces('application/json')
    public EchoBean echo(EchoBean echo) {
        return echo;
    }

}

and

package jersey;

public class EchoBean {
    public EchoBean() {
        super();
    }

    private String message;

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

}

这个非常简单的示例将导致以下带有引用的JSON-Schema元素的WADL:

<?xml version = '1.0' encoding = 'UTF-8'?>
<ns0:application xmlns:ns0='http://wadl.dev.java.net/2009/02'>
   <ns0:doc xmlns:ns1='http://jersey.java.net/' ns1:generatedBy='Jersey: 1.16-SNAPSHOT 11/19/2012 12:59 AM'/>
   <ns0:grammars/>
   <ns0:resources base='http://localhost:7103/Jersey/resources/'>
      <ns0:resource path='/echo'>
         <ns0:method id='echo' name='GET'>
            <ns0:response>
               <ns0:representation mediaType='application/json' xmlns:ns2='http://wadl.dev.java.net/2009/02/json-schema' ns2:describedby='application.wadl/echoBean'/>
            </ns0:response>
         </ns0:method>
         <ns0:method id='echo' name='POST'>
            <ns0:request>
               <ns0:representation mediaType='application/json' xmlns:ns3='http://wadl.dev.java.net/2009/02/json-schema' ns3:describedby='application.wadl/echoBean'/>
            </ns0:request>
            <ns0:response>
               <ns0:representation mediaType='application/json' xmlns:ns4='http://wadl.dev.java.net/2009/02/json-schema' ns4:describedby='application.wadl/echoBean'/>
            </ns0:response>
         </ns0:method>
      </ns0:resource>
   </ns0:resources>
</ns0:application>

URI application.wadl / echoBean包含以下简单的JSON-Schema定义:

{
    'type' : 'object',
    'properties' : {
        'message' : {
            'type' : 'string'
        }
    },
    'name' : 'echoBean'
}

现在,当前设计中存在许多限制,尤其是生成的模式不考虑任何符号设置 。 但是我认为这足以引起人们对该功能是否普遍有用的反馈。 在网络上以及在Oracle内部,人们对JSON-Schema的兴趣似乎都在增长,因此,看看这种描述是否变得更加普遍将很有趣。

参考: Gerard Davison博客博客中的JCG合作伙伴 Gerard Davison 在泽西 岛上的 JSON-Schema生成

翻译自: https://www.javacodegeeks.com/2012/11/json-schema-generation-in-jersey.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值