本文共 2141 字,大约阅读时间需要 7 分钟。
在Java EE 7中引入了JSON Processing API,即JSON-P规范。JSON-P规范定义了一套标准的API来操纵JSON数据,这一点与JAXP规范相似(操纵XML的API规范)。在Java EE 8中还将引入JSON Binding API,即JSON-B规范。
JSR 353: Java API for JSON Processing (JSON-P)规范详见
JSR 367: Java API for JSON Binding (JSON-B)规范详见JAX-RS 2.0规范是Java EE 7规范的一部分,它同时也支持JSON-P规范,比如对JsonObject类、JsonArray类、JsonStructure类等提供了开箱即用的支持。每一个兼容JAX-RS 2.0规范的参考实现都提供了内建的支持以上类的实体Provider,使得JAX-RS应用程序可以轻松简单地交换JSON数据。
JsonObject见:
JsonArray见: JsonStructure见:@GETpublic JsonArray buildJsonArray(){ return Json.createArrayBuilder().add("jsonp").add("jaxrs").build();}
@POSTpublic void acceptJsonObject(JsonObject payload){ System.out.println("the payload -- "+ payload.toString());}
1)JSON数据如下
{ "firstName": "John", "lastName": "Smith", "age": 25, "address" : { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
2)构建JsonObject
JsonObject value = Json.createObjectBuilder() .add("firstName", "John") .add("lastName", "Smith") .add("age", 25) .add("address", Json.createObjectBuilder() .add("streetAddress", "21 2nd Street") .add("city", "New York") .add("state", "NY") .add("postalCode", "10021")) .add("phoneNumber", Json.createArrayBuilder() .add(Json.createObjectBuilder() .add("type", "home") .add("number", "212 555-1234")) .add(Json.createObjectBuilder() .add("type", "fax") .add("number", "646 555-4567"))) .build();
1、无需编写自定义的MessageBodyReader类或MessageBodyWriter类的实现,正如前面提到的,JAX-RS规范提供了这些API。
2、使用注释绑定JSON方法的方式目前还不支持(类似于在POJOs类上使用JAXB注释),等未来的版本吧。GlassFish 4.1 (Jersey)和Wildfly 8.x (RESTEasy)已经支持了注释绑定JSON方法,但这种使用方式还不是标准,应注意这一点。
1、官方JAX-RS规范: