最近,我发布了如何利用EclipseLink JAXB(MOXy)的JSON绑定来创建RESTful服务。 在本文中,我将演示在客户端利用MOXy的JSON绑定有多么容易。

  • MOXy作为您的JAX-RS JSON提供程序–服务器端
  • MOXy作为您的JAX-RS JSON提供程序–客户端

URI

这篇文章将重点介绍我们在上一篇文章中声明的服务中的以下URI。 以下呼叫将返回居住在“任何城镇”的客户列表。

http://localhost:8080/CustomerService/rest/customers/findCustomersByCity/Any%20Town

Java SE客户端API

在第一个示例中,我们将使用标准的Java SE 6 API。 一些有趣的注意事项:

  • MOXy可以直接封送(第35行)和解封(第28行)往返于JSON数组的集合,而无需包装对象。
  • MOXy没有编译时间依赖性(它是运行时依赖性)。
  • eclipselink.media-type属性用于在unmarshaller(第25行)和marshaller(第33行)上启用JSON绑定。
  • eclipselink.json.include-root属性用于指示@XmlRootElement批注在JSON绑定中应被忽略(第26和34行)。
package example;import java.io.InputStream;
import java.net.*;
import java.util.List;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
import org.example.Customer;public class JavaSEClient {private static final String MEDIA_TYPE = "application/json";public static void main(String[] args) throws Exception {String uri = "http://localhost:8080/CustomerService/rest/customers/findCustomersByCity/Any%20Town";URL url = new URL(uri);HttpURLConnection connection =(HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.setRequestProperty("Accept", MEDIA_TYPE);JAXBContext jc = JAXBContext.newInstance(Customer.class);Unmarshaller unmarshaller = jc.createUnmarshaller();unmarshaller.setProperty("eclipselink.media-type", MEDIA_TYPE);unmarshaller.setProperty("eclipselink.json.include-root", false);InputStream xml = connection.getInputStream();List<Customer> customers = (List<Customer>) unmarshaller.unmarshal(new StreamSource(xml), Customer.class).getValue();connection.disconnect();Marshaller marshaller = jc.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.setProperty("eclipselink.media-type", MEDIA_TYPE);marshaller.setProperty("eclipselink.json.include-root", false);marshaller.marshal(customers, System.out);}}

输出量

以下是运行Java SE客户端的输出。 对于那些可能使用JAXB( JSR-222 )实现和Jettison之类的东西来产生/使用JSON的人,以下是一些值得注意的有趣事项:

  • MOXy将集合呈现为JSON数组。
  • MOXy正确表示数字值而不带引号(第26行)。
  • MOXy用方括号正确地包围了大小为1的集合(第28和32行)。
[ {"address" : {"city" : "Any Town","id" : 1,"street" : "1 A Street"},"firstName" : "Jane","id" : 1,"lastName" : "Doe","phoneNumbers" : [ {"id" : 2,"num" : "555-2222","type" : "HOME"}, {"id" : 1,"num" : "555-1111","type" : "WORK"} ]
}, {"address" : {"city" : "Any Town","id" : 10,"street" : "456 Another Road"},"firstName" : "Sue","id" : 10,"lastName" : "Jones","phoneNumbers" : [ {"id" : 10,"num" : "555-3333","type" : "WORK"} ]
} ]

泽西岛客户端API

JAX-RS 2.0( JSR-339 )正在致力于标准化客户端API。 使用JAX-RS 1.0,许多实现都提供了自己的版本。 以下是使用Jersey提供的客户端API的示例。 注意我们如何利用服务器端使用的完全相同的MessageBodyReader / Writer (第14行,将MOXy称为JAX-RS JSON提供程序–服务器端 )。 我还指定了LoggingFilter (第17行),因此我们可以仔细查看该消息。

package example;import java.util.List;
import org.example.Customer;
import org.example.MOXyJSONProvider;
import com.sun.jersey.api.client.*;
import com.sun.jersey.api.client.config.*;
import com.sun.jersey.api.client.filter.LoggingFilter;public class JerseyClient {public static void main(String[] args) {ClientConfig cc = new DefaultClientConfig();cc.getClasses().add(MOXyJSONProvider.class);Client client = Client.create(cc);client.addFilter(new LoggingFilter());WebResource resource = client.resource("http://localhost:8080/CustomerService/rest/customers");List<Customer> customers = resource.path("/findCustomersByCity/Any%20Town").accept("application/json").get(new GenericType<List<Customer>>(){});for(Customer customer : customers) {System.out.println(customer.getFirstName());}}}

输出量

以下是运行Jersey客户端的输出。

14-Mar-2012 4:08:12 PM com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 1 * Client out-bound request
1 > GET http://localhost:8080/CustomerService/rest/customers/findCustomersByCity/Any%20Town
1 > Accept: application/json
1 > 14-Mar-2012 4:08:12 PM com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 1 * Client in-bound response
1 < 200
1 < Transfer-Encoding: chunked
1 < Date: Wed, 14 Mar 2012 20:08:12 GMT
1 < Content-Type: application/json
1 < X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.1 Java/Oracle Corporation/1.7)
1 < Server: GlassFish Server Open Source Edition 3.1.1
1 <
[{"address" : {"city" : "Any Town", "id" : 1, "street" : "1 A Street"}, "firstName" : "Jane", "id" : 1, "lastName" : "Doe", "phoneNumbers" : [{"id" : 1, "num" : "555-1111", "type" : "WORK"}, {"id" : 2, "num" : "555-2222", "type" : "HOME"}]}, {"address" : {"city" : "Any Town", "id" : 10, "street" : "456 Another Road"}, "firstName" : "Sue", "id" : 10, "lastName" : "Jones", "phoneNumbers" : [{"id" : 10, "num" : "555-3333", "type" : "WORK"}]}]Doe, Jane
Jones, Sue

进一步阅读

如果您喜欢这篇文章,那么您可能也会对以下内容感兴趣:

  • RESTful服务
    • MOXy作为您的JAX-RS JSON提供程序–服务器端
    • 创建一个RESTful服务
      • 第1部分–数据库
      • 第2部分–将数据库映射到JPA实体
      • 第3部分–将JPA实体映射到XML(使用JAXB)
      • 第4部分– RESTful服务
      • 第五部分–客户
    • JAX-RS服务中的MOXy的XML元数据
  • JSON绑定
    • 使用EclipseLink MOXy进行JSON绑定– Twitter示例
    • 绑定到JSON和XML –地理编码示例

参考: MOXy作为您的JAX-RS JSON提供程序–来自Java XML和JSON绑定博客的JCG合作伙伴 Blaise Doughan的客户端 。

翻译自: https://www.javacodegeeks.com/2012/04/moxy-as-your-jax-rs-json-provider_18.html

MOXy作为您的JAX-RS JSON提供程序–客户端相关推荐

  1. moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–客户端

    moxy json介绍 最近,我发布了如何利用EclipseLink JAXB(MOXy)的JSON绑定来创建RESTful服务. 在本文中,我将演示在客户端利用MOXy的JSON绑定有多么容易. M ...

  2. moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–服务器端

    moxy json介绍 在之前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对 ...

  3. MOXy作为您的JAX-RS JSON提供程序–服务器端

    在以前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务. 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对基于JAXB映射的JSO ...

  4. Android内容提供程序

    内容提供程序管理对结构化数据集的访问,它们封装数据,并供用于定义数据安全性的机制.内容提供程序是连接一个进程中的数据与另一个进程中运行的代码的标准界面. 将应用的Context中的ContentRes ...

  5. moxy json介绍_MOXy是GlassFish 4中新的默认JSON绑定提供程序

    moxy json介绍 GlassFish 4现在可以提供完整的Java EE 7(JSR-342)平台. EclipseLink为该发行版做出了一些重大贡献. 首先是提供JPA 2.1(JSR-33 ...

  6. MOXy是GlassFish 4中新的默认JSON绑定提供程序

    GlassFish 4现在可以提供完整的Java EE 7(JSR-342)平台. EclipseLink为该发行版做出了一些重大贡献. 首先是提供JPA 2.1(JSR-338)实现. 我将在本文中 ...

  7. jax rs mysql_liferay7-rest开发JAX-RS规范详解

    简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. 在本文中,了解 JAX ...

  8. IE 8 中自定义自己的 Search Provider (搜索提供程序)

    介绍 本文会为大家展示如果使用VS 2008 来创建基于IE8 的搜索提供程序, 以及在其中添加文本搜索建议和带有图片的搜索建议. 目的 学习如何使用VS 2008 来制作自己的搜索提供程序 步骤1 ...

  9. mysql 当前记录集不支持书签_存储过程 分页。当前记录集不支持书签。这可能是提供程序或选定的游标类型的限制。...

    ifsession("user")="A0331A2"then'试验存储过程response.Write("存储过程")DIMMyComm, ...

最新文章

  1. Java项目:网上花店商城系统(java+jsp+servlert+mysql+ajax)
  2. php truepath,php – 为什么switch(true)具有比if()elseif()更小的NPath复杂度?
  3. 运行scrapy保存图片,报错ValueError: Missing scheme in request url: h
  4. mysql根据id删除数据sql语句_sql delete根据id删除数据库
  5. win32 控件的创建和消息响应
  6. Leadership_领导力和团队管理
  7. Java中常见数据结构:list与map -底层如何实现
  8. Oracle 11G GoldenGate实现Windows与Windows之间的单向同步
  9. 2021年网络安全学习路线指导(含视频教程)
  10. Java List 集合取 交集、并集、差集、补集 Java集合取交集、Java集合并集
  11. CentOS7安装PHP5.3.28
  12. 我的测试工程师之路--测试人员不看后悔
  13. 服务器被挖矿入侵,进程 command为ld-linux-x86-64占用cpu很高,解决经历
  14. DSP6713 Simulator HelloWorld与LED
  15. 波形发生器的工作原理
  16. VSCode 插件大全
  17. 纪念日或者悼念日 网站改为灰白模式
  18. 坐标系转换-大地坐标转笛卡尔坐标系,笛卡尔坐标系转东北天坐标系
  19. Javascript与多线程
  20. 如何将CSDN博客下载为PDF文件

热门文章

  1. MySQL存储过程+游标+触发器
  2. buildpack_使用Buildpack容器化Spring Boot应用程序
  3. soapui 测试soap_使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分
  4. 精简jdk包_具有JDK 12精简数字格式的自定义精简数字模式
  5. aws lambda_跑来跑去:假人与AWS Lambda的第一次接触
  6. junit测试起名字规则_如何在JUnit 5中替换规则
  7. 操作方法:带有Thymeleaf和Spring Boot的Java 8日期和时间
  8. Spring @RequestParam批注
  9. github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库
  10. Java:使用SingletonStream获得性能