通常REST接口会以XML或JSON作为主要传输格式,同时 Jersey 也支持其他的数据格式,比如基本类型、文件、流等格式。

  1. 基本类型

    Java的基本类型又叫原生类型,包括4种整数(byte、short、int、long)、2种浮点类型(float、double)、Unicode编码的字符(char)和布尔类型(boolean),Jersey 支持全部的基本类型,还支持与之相关的引用类型,示例代码如下:

  • REST 服务代码

    @POST

    @Path("b")

    public String postBytes(final byte[] bs) {

    for (final byte b : bs) {

    System.out.print(Integer.toHexString(b) + " ");

    }

     
     

    return "byte[]:" + new String(bs);

    }

  • 单元测试

    @Test

    public void postBytesTest() {

    final String message = "TEST STRING";

    final Invocation.Builder request = target.path("demos").path("b").request();

    final Response response = request.post(Entity.entity(message, MediaType.TEXT_PLAIN_TYPE), Response.class);

    String result = response.readEntity(String.class);

     
     

    System.out.println("result:" + result);

     
     

    Assert.assertTrue("字符串不匹配", result.equals("byte[]:" + message));

    }

  1. 文件类型

    Jersey 支持传输 File 类型的数据,以方便客户端直接传递File类实例给服务端,文件类型的请求,默认使用的媒体类型是 Content-Type:text/html,示例代码如下:

  • REST服务代码

    @POST

    @Path("file")

    public String uploadFile(final File file) {

    StringBuilder sb = new StringBuilder(1024000 * 5);

    try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file))) {

    byte[] buff = new byte[102400];

    int readCount;

    String dir = System.getProperty("user.dir");

    File outputFile = new File(dir + "\\updateFile");

    try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(outputFile))) {

    do {

    readCount = bufferedInputStream.read(buff, 0, buff.length);

    if (readCount > 0) {

    bufferedOutputStream.write(buff, 0, readCount);

    }

    } while (readCount > 0);

    }

    return "ok";

    } catch (Exception ex) {

    ex.printStackTrace();

    return "";

    }

    }

  • 单元测试

    @Test

    public void PostFileTest() {

    URL resource = getClass().getClassLoader().getResource("TortoiseGit-2.3.0.0-64bit.msi");

    File file = new File(resource.getFile());

    Invocation.Builder builder = target.path("demos").path("file").request();

    Response response = builder.post(Entity.entity(file, MediaType.TEXT_HTML_TYPE));

    if (response.getStatus() == 200) {

    String result = response.readEntity(String.class);

    System.out.println(result);

    } else {

    System.out.println("response status=" + response.getStatus() + "\tmessage=" + response.getStatusInfo());

    }

    }

  1. 字节流和字符流类型

    Jersey 支持Java的两大读写模式,即字节流和字符流

  • 字节流:
    • REST服务代码

      @POST

      @Path("fileInputStream")

      public String uploadFileByInputStream(final InputStream inputStream) {

      StringBuilder sb = new StringBuilder(1024000 * 5);

      try (BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) {

      byte[] buff = new byte[102400];

      int readCount;

      String dir = System.getProperty("user.dir");

      File outputFile = new File(dir + "\\updateFile");

      try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(outputFile))) {

      do {

      readCount = bufferedInputStream.read(buff, 0, buff.length);

      if (readCount > 0) {

      bufferedOutputStream.write(buff, 0, readCount);

      }

      } while (readCount > 0);

      }

       
       

      return "ok";

      } catch (Exception ex) {

      ex.printStackTrace();

      return "";

      }

      }

    • 单元测试

      @Test

      public void PostFileByInputStreamTest() {

      InputStream inputStream = null;

      try {

      inputStream = getClass().getClassLoader().getResource("TortoiseGit-2.3.0.0-64bit.msi").openStream();

       
       

      Invocation.Builder builder = target.path("demos").path("fileInputStream").request();

      Response response = builder.post(Entity.entity(inputStream, MediaType.TEXT_PLAIN_TYPE));

      if (response.getStatus() == 200) {

      String result = response.readEntity(String.class);

      System.out.println(result);

      } else {

      System.out.println("response status=" + response.getStatus() + "\tmessage=" + response.getStatusInfo());

      }

      } catch (IOException e) {

      e.printStackTrace();

      }

      }

  • 字符流:
    • REST服务代码

      @POST

      @Path("fileReader")

      public String uploadFileByReader(final Reader reader) {

      StringBuilder sb = new StringBuilder(1024000 * 5);

      try (BufferedReader bufferedReader = new BufferedReader(reader)) {

      byte[] buff = new byte[102400];

      String readLine;

      String dir = System.getProperty("user.dir");

      File outputFile = new File(dir + "\\updateFile.xml");

      try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(outputFile))) {

      do {

      readLine = bufferedReader.readLine();

      if (readLine != null) {

      bufferedWriter.write(readLine);

      bufferedWriter.newLine();

      }

      } while (readLine != null);

      }

      return "ok";

      } catch (Exception ex) {

      ex.printStackTrace();

      return "";

      }

      }

    • 单元测试

      @Test

      public void PostFileByReaderTest() {

      InputStream inputStream = null;

      try {

      inputStream = getClass().getClassLoader().getResource("POM.xml").openStream();

       
       

      Invocation.Builder builder = target.path("demos").path("fileReader").request();

      Response response = builder.post(Entity.entity(inputStream, MediaType.TEXT_PLAIN_TYPE));

      String result = response.readEntity(String.class);

      System.out.println(result);

      } catch (IOException e) {

      e.printStackTrace();

      }

      }

       
       

 
 

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

  1. 笔记:Jersey REST 传输格式-JSON

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

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

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

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

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

  4. QT断点续传(原理:需要在HTTP请求的header中添加Rang节,告诉服务器从文件的那个位置开始传输.格式为bytes 开始传输的位置)

    //功能:    根据一个URL地址将数据保存到指定路径下,支持断点续传//参数:    url            --需要访问的URL地址//         SavePath       -- ...

  5. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(八)RTP音视频传输解析层之MPA传输格式

    一.MPEG RTP音频传输 相较H264的RTP传输格式,MPEGE音频传输格式则简单许多. 每一包MPEG音频RTP包都前缀一个4字节的Header,如下图(RFC2550) “MBZ”必须为0( ...

  6. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(七)RTP音视频传输解析层之H264传输格式

    一.H264传输封包格式的2个概念 (1)组包模式(Packetization Modes) RFC3984中定义了3种组包模式:单NALU模式(Single Nal Unit Mode).非交错模式 ...

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

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

  8. Fortran学习笔记:01 基本格式与变量声明

    Fortran学习笔记目录 01 基本格式与变量声明 格式 固定格式(Fixed Format):Fortran77 程序需要满足一种特定的格式要求,具体形式参考教材 自由格式(Free Format ...

  9. HTTP的FormData和Payload的传输格式

    FormData和Payload是浏览器传输给接口的两种格式,这两种方式浏览器是通过Content-Type来进行区分的(了解Content-Type),如果是 application/x-www-f ...

随机推荐

  1. 从零开始学习前端JAVASCRIPT — 14、闭包与继承

    一.闭包 1 . 概念:闭包就是能够读取其他函数内部变量的函数.在JS中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解为”定义在一个函数内部的函数”. 2 . 闭包的特点 1)可以读取 ...

  2. hadoop源码调试

    原文地址:http://www.cnblogs.com/end/archive/2011/04/26/2029497.html 在使用hadoop的时候,可能遇到各种各样的问题,然而由于hadoop的 ...

  3. java:产生小数位数为2的随机概率,使得和为1

    public static List<InstSec> setDataSec(List<String> instno) { List<InstSec> result ...

  4. webpack打包速度和性能再次优化

    一. 改单dll为双dll 因为上图原因,使用CommonsChunkPlugin时,导致其打包出来的vendors.js内的模块ID会因为其他文件引用模块数量的变化而变化. 所以现利用DllPlug ...

  5. 1.5 PCI-X总线简介

    PCI-X总线仍采用并行总线技术.PCI-X总线使用的大多数总线事务基于PCI总线,但是在实现细节上略有不同.PCI-X总线将工作频率提高到533MHz,并首先引入了PME(Power Managem ...

  6. 图像处理------透明混合 - Alpha Blending效果

    基本原理: 图像的透明混合有个专属名词– Alpha Blending 对任意两张图像可以合成为一张图像,合成图像的像素取值根据数学公式: RGB3 = (1- a) * RGB1 + a * RGB ...

  7. 远程块存储iSCSI

    /* Border styles */ #table-2 thead, #table-2 tr { border-top-width: 1px; border-top-style: solid; bo ...

  8. How to verify Certificate Pinning?

    Some friends of mine they worry about the risk of Man-in-the-middle so they ask me how to verify the ...

  9. setBit testBit权限管理(shiro项目中来的二)

    一,setBit testBit权限管理的理解 1.1.jdk7文档解释 public boolean testBit(int n)Returns true if and only if the de ...

  10. FFMPEG 在ubuntu下的安装与使用

    转载自 http://www.cnblogs.com/dwdxdy/p/3240167.html (部分一:安装) ffmpeg的安装: 1.下载源文件(以ffmpeg1.2.1为例): http:/ ...