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. Hadoop压缩

    为什幺要压缩? 压缩会提高计算速度?这是因为mapreduce计算会将数据文件分散拷贝到所有datanode上,压缩可以减少数据浪费在带宽上的时间,当这些时间大于压缩/解压缩本身的时间时,计算速度就会 ...

  2. mysql常用基础操作语法(十一)~~字符串函数【命令行模式】

    注:sql的移植性比较强,函数的移植性不强,一般为数据库软件特有,例如mysql有mysql的函数,oracle有oracle的函数. 1.concat连接字符串: 从上图中可以看出,直接使用sele ...

  3. configure: error: xml2-config not found. Please check your libxml2 installation

    安装php时的报错 checking libxml2 install dir... nochecking for xml2-config path... configure: error: xml2- ...

  4. ArgumentError:Error #2004:某个参数无效

    1.错误描述 ArgumentError:Error #2004:某个参数无效 at flash display::Graphics/drawRect() at ZeroClipboard() 2.错 ...

  5. class-支持向量机SVM全析笔记

    support vector machines,SVM是二类分类模型.定义在特征空间上间隔最大的线性分类器,由于包括核技巧实质上成为非线性分类器.学习策略是间隔最大化,可形式化为求解凸二次规划问题(c ...

  6. 基于Spring Boot的RESTful API实践(一)

    1. RESTful简述    REST是一种设计风格,是一组约束条件及原则,而遵循REST风格的架构就称为RESTful架构,资源是RESTful的核心,一个好的RESTful架构,通过URL就能很 ...

  7. 利用SSH端口转发实现跨机器直接访问

    在实际项目测试中经常会遇到数据库操作,但是因为公司安全问题,访问数据库往往需要通过跳板机.但通过跳板机,测试效率大打折扣,因此通过使用SSH端口转发,从而达到跨机器直接访问数据库.实际项目中的应用会比 ...

  8. STM32F4使用FPU+DSP库进行FFT运算的测试过程一

    测试环境:单片机:STM32F407ZGT6   IDE:Keil5.20.0.0  固件库版本:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 第一部分:使用源码文件的方式,使 ...

  9. 关于js的语句类型运算符等

    JavaScript的基本语句有以下几种: 1.for(判断条件){执行内容}: 2.if(条件){...}else{ ....}: 3.while(条件){....}:先判断条件再执行: do{.. ...

  10. Spring Data(一)概念和仓库的定义

    Spring Data(一)概念和仓库的定义 Spring Data的主要任务是为数据访问提供一个相似的.一致的.基于Spring的编程模型,同时又保留着下面各个数据存储的特征.它使得使用数据访问技术 ...