编写规范并为其做出贡献是一回事。 如果您想提供宝贵的反馈意见,请使用它并研究真实的示例。 最新推广的GlassFish构建包含重命名为4.0,我认为现在是对Java处理JSON(JSON-P)API进行测试的好时机。
获取启用了Java EE 7的GlassFish 4.0
首先要做的是从升级的版本中获取最新的启用Java EE 7的GlassFish 4.0的副本。 我正在使用GlassFish Server开源版4.0(内部版本77 ),它似乎非常稳定。 但是总的来说,如果您要尝试这样做,请记住,升级后的版本基本上是开发版本和不稳定版本的
GlassFish 4.0正在进行的工作。 抱怨他们没有多大意义。 将下载文件解压缩到合适的位置。 对于后续步骤,您需要更新modules目录中的JSON-P RI。 遵循Arun的博客,了解如何获取和构建JSON-P RI ,并将jsonp〜git \ impl \ target \ javax.json-1.0-SNAPSHOT.jar复制到glassfish4 \ glassfish \ modules \ javax.json.jar。 如果在此步骤中做错了什么,请确保制作一份原件的副本。 如果您对此感到不舒服,也可以稍后跳过它并选择其他依赖项……事实是,JSON-P API在过去几个月中发生了很大变化,GlassFish包含的b02不再适合给你看任何东西。 因此,现在,我们必须对其进行一些调整。 之后,您将可以将全新的GlassFish安装集成到您最喜欢的IDE(可能是NetBeans)中 。
创建一个新的Java EE 7项目
Java EE 7原型位于codehaus.org快照存储库中。 为了通过NetBeans有效地使用它,您必须在“ Maven存储库”下的“服务”选项卡上配置存储库。 存储库URL为https://nexus.codehaus.org/content/repositories/snapshots/。 处理索引可能需要一段时间。 之后,继续执行“新建项目> Maven>来自原型的项目”向导,并在搜索框中输入“ webapp-javaee7”。 选择0.1-快照,然后单击“完成”。 另外,您始终可以使用以下命令行:
mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7 -DarchetypeVersion=0.1-SNAPSHOT -DarchetypeRepository=https://nexus.codehaus.org/content/repositories/snapshots/ -DgroupId=net.eisele.sample -DartifactId=javaee7-jsonp -Dversion=1.0-SNAPSHOT -Dpackage=net.eisele.javaee7jsonp -Darchetype.interactive=false --batch-mode --update-snapshots archetype:generate
现在打开项目并编辑pom.xml。 将javaee-web-api的范围更改为提供的范围,并添加json-api依赖项,如下所示:
<dependencies><dependency><groupId>javax.json</groupId><artifactId>javax.json-api</artifactId><version>1.0-SNAPSHOT</version><scope>provided</scope></dependency><dependency><groupId>javax</groupId><artifactId>javaee-web-api</artifactId><version>7.0-b72</version><scope>provided</scope></dependency></dependencies>
请确保使用版本1.0-SNAPSHOT和_not_正式记录的1.0-b02 。 我们希望将第一段中构建的最新快照与所有新API一起使用。如果您决定不采用“以自己的方式构建”,则可以简单地使用maven Central的1.0-b04。 这也有效。 请确保完全具有此依存关系顺序。 如果没有,您将使用javaee-web-api依赖项随附的旧b02。 有人说过,Maven很简单吗? 现在就这样。 让我们创建一个简单的JAX-RS端点。
添加JAX-RS人员资源
首先要做的是编写基本的JAX-RS资源。 您可以通过NetBeans的“来自Pattern的RESTful Web服务”向导来完成此操作,也可以自己概述以下简短类:
@Path('person')
public class PersonResource {public PersonResource() {}@GET@Produces('application/json')public String getJson() {return '[]';}
该课程需要注册。 您可以使用Jerseys servlet机制来执行此操作,也可以使用特定于应用程序的ApplicationConfig自己注册它:
@javax.ws.rs.ApplicationPath('webresources')
public class ApplicationConfig extends Application {@Overridepublic Set<Class<?>> getClasses() {Set<Class<?>> resources = new java.util.HashSet<>();resources.add(net.eisele.javaee7jsonp.PersonResource.class);return resources;}
}
哇..这应该是目前为止。 您应该给它试驾。 将其部署到您的域,然后尝试http:// localhost:8080 / javaee7-jsonp / webresources / person。 它应该只打印空括号[]。 现在是时候添加一些JSON-P了。
使用JSON-P构建JSON对象
我们将使用基于DOM的API构建人的JSON表示形式。 用以下代码替换PersonResource中的return语句:
JsonObjectBuilder builder = Json.createObjectBuilder();builder.add('person', Json.createObjectBuilder().add('firstName', 'Markus').add('lastName', 'Eisele'));JsonObject result = builder.build();StringWriter sw = new StringWriter();try (JsonWriter writer = Json.createWriter(sw)) {writer.writeObject(result);}return sw.toString();
现在,让我们使用我最喜欢的Chrome扩展程序来看看我们拥有的功能:
显然可以。 反过来,这将意味着读取传入的JSON。 看起来可能如下所示:
String json = '{\n'+ ' \'person\': {\n'+ ' \'firstName\': \'Markus\',\n'+ ' \'lastName\': \'Eisele\'\n'+ ' }\n'+ '}';JsonReader jr = Json.createReader(new StringReader(json));JsonValue value = jr.readObject();jr.close();
除了DOM-API之外,您还拥有一个Streaming-API,该API使用
JsonGenerator generator = Json.createGenerator(new FileWriter(..))JsonParser parser = Json.createParser(new StringReader(...));
生成和解析JSON。 请查看最新的JavaDoc以获取完整参考。 继续尝试自己开车。
参考:来自JCG合作伙伴 Markus Eisele在企业软件开发和Java博客上测试了用于驱动GlassFish 4.0处理JSON的Java API 。
翻译自: https://www.javacodegeeks.com/2013/02/test-driving-java-api-for-processing-json-with-glassfish-4-0.html