JSON 类型已经成为Ajax技术中数据传输的实际标准,Jersey 提供了多种处理JSON数据的包和解析方式,下表展示了JSON包和解析方式:

解析方式\JSON支持包

MOXy

JSON-P

Jackson

基于POJO的JSON绑定

基于JAXB的JSON绑定

低级的(逐字的)JSON解析和处理

  1. 使用 MOXy 处理JSON

    MOXy

    EclipseLink项目的一个模块,是使用JAXB和SDO作为XML绑定的技术基础,实现了JSR222标准(JAXB2.2)和JSR235标准(SDO2.11),使用MOXy的Java开发者能够高效的完成Java类和XML绑定,所要的只是使用注解来定义他们之间的关系,同时,MOXy实现了JSR-353标准(Java
    API
    for
    Processing
    JSON1.0),以JAXB为基础来实现对JSR353的支持

  • 定义依赖

    <dependency>

              <groupId>org.glassfish.jersey.media</groupId>

              <artifactId>jersey-media-moxy</artifactId>

    </dependency>

  • 定义Application

    // 该注解用于Servlet3

    @ApplicationPath("/api/*")

    public class JsonResourceConfig extends ResourceConfig {

            public
    JsonResourceConfig() {

                   
     register(MyResource.class);

    // 注册JSON处理

    register(MOXyJsonProvider.class);

           
    property(CommonProperties.MOXY_JSON_FEATURE_DISABLE, Boolean.TRUE);

                    
    System.out.println("JsonResourceConfig 构造函数调用");

            }

    }

  • Servlet配置(Servlet3 可以不定义web.xml配置)

    <?xml
    version="1.0"
    encoding="UTF-8"?>

    <web-app
    version="2.5"
    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_2_5.xsd">

            <servlet>

                    <servlet-name>Jersey Web Application</servlet-name>

                    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

                    <init-param>

                            <param-name>javax.ws.rs.Application</param-name>

                            <param-value>org.drsoft.rest.JsonResourceConfig</param-value>

                    </init-param>

                    <load-on-startup>1</load-on-startup>

            </servlet>

            <servlet-mapping>

                    <servlet-name>Jersey Web Application</servlet-name>

                    <url-pattern>/*</url-pattern>

            </servlet-mapping>

    </web-app>

  • REST服务代码

        @GET

        @Path ("book")

        @Produces (MediaType.APPLICATION_JSON)

        @Consumes (MediaType.APPLICATION_JSON)

        public Book getBook() {

                Book newBook = new
Book();

                newBook.setId(1);

                newBook.setName("Java RESTful WebService学习");

 
 

                Publisher newPublisher = new
Publisher();

                newPublisher.setName("机械出版社");

                newPublisher.setIsbn("989797397342343");

                newPublisher.setPublishTime(new Date());

                newBook.setPublisher(newPublisher);

 
 

                return newBook;

        }

其中Book类和Publisher类不需要额外处理,MOXy可以根据POJO类来进行JSON绑定,如果需要使用 JAXB 注解本身可以控制一定 JSON 格式输出,具体来说,直接通过使用 JAXB 注释很容易做到重命名(@XmlElement)和删除(@XmlTransient)属性,示例代码如下:

@XmlRootElement

public class Publisher {

        @XmlElement (name = "n")

        private String name;

        private String isbn;

        private Date publishTime;

        @XmlTransient

        public Date getPublishTime() {

                return publishTime;

        }

        public
void
setPublishTime(Date publishTime) {

                this.publishTime = publishTime;

        }

//
setter

getter
方法

}

JSON输出内容如下:

{

        "n": "机械出版社",

        "isbn": "989797397342343"

}

 
 

  1. 使用JSON-P处理JSON

    JSON-P的全称是Java API for
    JSON
    Processing(Java
    的JSON处理API),是JSR353标准规范,用于统一Java处理JSON格式数据的API,其生产和消费的JSON数据以流的形式处理,并为JSON数据建立Java对象模型。

  • 定义依赖

    <dependency>

                <groupId>org.glassfish.jersey.media</groupId>

                <artifactId>jersey-media-json-processing</artifactId>

    </dependency>

  • 定义Application

    // 该注解用于Servlet3

    @ApplicationPath("/api/*")

    public class JsonProcessingResourceConfig extends ResourceConfig {

            public
    JsonProcessingResourceConfig() {

                    // 注册REST类

                    register(MyResource.class);

                    // 启用格式化Json数据的输出

                    property(JsonGenerator.PRETTY_PRINTING, Boolean.TRUE);

            }

    }

  • Servlet配置(Servlet3 可以不定义web.xml配置)

    <?xml
    version="1.0"
    encoding="UTF-8"?>

    <web-app
    version="2.5"
    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_2_5.xsd">

            <servlet>

                    <servlet-name>Jersey Web Application</servlet-name>

                    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

                    <init-param>

                            <param-name>javax.ws.rs.Application</param-name>

                            <param-value>org.drsoft.rest.JsonProcessingResourceConfig</param-value>

                    </init-param>

                    <load-on-startup>1</load-on-startup>

            </servlet>

            <servlet-mapping>

                    <servlet-name>Jersey Web Application</servlet-name>

                    <url-pattern>/*</url-pattern>

            </servlet-mapping>

    </web-app>

  • REST服务代码

        @GET

        @Path ("bookJsonP")

        @Produces (MediaType.APPLICATION_JSON+";charset=UTF-8")

        @Consumes (MediaType.APPLICATION_JSON)

        public JsonObject getBookByJsonP() {

 
 

                JsonObjectBuilder publisherObjectBuilder = Json.createObjectBuilder();

                publisherObjectBuilder.add("isbn", "939393939393939");

                publisherObjectBuilder.add("name", "电子工程也出版社");

                publisherObjectBuilder.add("publishTime", new
Date().toString());

 
 

                JsonObjectBuilder objectBuilder = Json.createObjectBuilder();

                objectBuilder.add("name", "Java RESTful WebService学习");

                objectBuilder.add("id", 999);

                objectBuilder.add("publisher", publisherObjectBuilder);

 
 

                return objectBuilder.build();

        }

JSON-P不需要创建POJO类,通过JsonObjectBuilder来创建JsonObject对象,通过该对象输出Json字符串。

 
 

 
 

笔记:Jersey REST 传输格式-JSON的更多相关文章

  1. 笔记:Jersey REST 传输格式

    通常REST接口会以XML或JSON作为主要传输格式,同时 Jersey 也支持其他的数据格式,比如基本类型.文件.流等格式. 基本类型 Java的基本类型又叫原生类型,包括4种整数(byte.sho ...

  2. 笔记:Jersey REST 传输格式-XML

    XML类型是使用最广泛的数据类型,Jersey 对XML类型的数据处理,支持Java领域的两大标准,即JAXP(Java API for XML Processing,JSR-206)和JAXB(Ja ...

  3. ASP.NET WebServce项目下添加Http服务,支持Get,Post请求方式;传输格式json/xml

    由于WEBServce老项目中需要增添新的接口,而且添加的接口不希望被其它项目以引用Servces方式使用. 那么得在现有Service项目中添加Http请求方式来实现系统间数据交互.只需要告知请求地 ...

  4. 在同一个项目中灵活运用application/json 和application/x-www-form-urlencoded 两种传输格式(配合axios,同时配置loading)

    'use strict' import axios from 'axios' // import qs from 'qs' import { Notification} from 'element-u ...

  5. 【Spring学习笔记-MVC-3】SpringMVC返回Json数据-方式1

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  6. 数据交换格式 —— JSON(JavaScript Object Notation)

    当请求 headers 中,添加一个name为 Accept,值为 application/json 的 header(也即"我"(浏览器)接收的是 json 格式的数据),这样, ...

  7. 图解 TCP/IP 第六章 TCP与UDP 笔记6.1 传输层的作用

     图解 TCP/IP  第六章 TCP与UDP   笔记6.1 传输层的作用   传输层必须指出这个具体的程序,为了实现这一功能,使用端口号这样一种识别码.根据端口号,就可以识别在传输层上一层的应用程 ...

  8. javascript中字符串格式json如何转化成json对象

    什么是JSON JSON(JavaScript Object Notation)是一种优美的JavaScript对象创建方法.JSON也是一种轻量级数据交换格式.JSON非常易于人阅读与编写,同时利于 ...

  9. 【转】[WCF REST] 帮助页面与自动消息格式(JSON/XML)选择

    可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为WebHttpBehav ...

随机推荐

  1. android DecorView深入理解

    开发中,通常都是在onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局.页面都是依附在窗口之上的,而DecorView即是窗口最顶 ...

  2. redis在windows下的安装

    redis服务器端程序:https://github.com/dmajkic/redis/downloads 根据自己的操作系统,选择32位和64位的 解压后文件目录如下 redis-server.e ...

  3. [php错误]PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法

    使用unserialize函数将数据储存到数据库的时候遇到了这个报错, 后来发现是将gb2312转换成utf-8格式之后, 每个中文的字节数从2个增加到3个之后导致了反序列化的时候判断字符长度出现了问 ...

  4. 【memcache】windos下 memcache更改默认的端口和最大使用内存

    1>用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务器放在192.168.1.55的服务器上 2>修改端口,如改为11200 3>分配内存, ...

  5. SQL注入攻击三部曲之进阶篇

    SQL注入攻击三部曲之进阶篇 通过入门篇的学习,我们知道了SQL注入攻击的判断方法,但是如果想侵入网站,获取网站的机密内容,那么仅靠入门篇的知识是无法达到的.本篇文章我们将进一步的分析SQL注入攻击. ...

  6. WebService之CXF注解之五(配置文件)

    1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=" ...

  7. RAID10与RAID01比较,RAID10与RAID5比较

    RAID10和RAID01的比较RAID10是先做镜象,然后再做条带. RAID01则是先做条带,然后再做镜象.    比如以6个盘为例,RAID10就是先将盘分成3组镜象,然后再对这3个RAID1做 ...

  8. 几个平台环境里视频编解码和图像scale的硬件加速的方法

    记录一下遇到几个平台里的视频编解码和图像scale的硬件加速的方法 1,intel平台当包含GEN系列的集成GPU时,可用libva实现视频codec.颜色空间转换和图像scale的硬件加速,具体可使 ...

  9. Educational Codeforces Round 36 (Rated for Div. 2) E. Physical Education Lessons

    提供两种思路 一种线段树区间更新 另一种用map维护连续的区间,也是题解的思路 第二种很难写(我太渣,看了别人的代码,发现自己写的太烦了) #include<iostream> #incl ...

  10. linux和windows通用的路径

    String path=request.getSession().getServletContext().getRealPath("/")+"js" + Sys ...