通常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. MAC地址表配置与绑定

    MAC地址表分类 ---静态MAC地址表项由用户手工配置,表项不老化: ---黑洞MAC地址表项包括源黑洞MAC地址表项和目的黑洞MAC地址表项,用于丢弃含有特定源MAC地址或目的MAC地址的报文(例 ...

  2. SpringMVC的数据转换,格式化和数据校验

          在SpringMVC中,根据请求方法签名不同,将请求消息中的消息以一定的方式转换并绑定到请求方法的参数中,在请求信息到达真正调用处理方法的这一段时间内,SpringMVC还会完成很多其他的 ...

  3. PCI、CPCI、CPCIE 区别、特点

    PCI.CPCI.CPCIE 区别.特点 CPCI总线 •PCI总线作为处理器系统的局部总线,主要目的是为了连接外部设备,而不是作为处理器的系统总线连接Cache和主存储器 •(1) PCI总线空间与 ...

  4. AFDX总线协议规范

    AFDX总线协议规范 1.概述 2. AFDX简介 3.AFDX的在数据传输性能的改进 3.1 AFDX以太网帧格式 3.2 AFDX以太网冗余备份 3.3 虚拟连接 3.4 数据交换处理 4.航空计 ...

  5. python3写入csv多一个空行

    今天用python3 写入csv 总是多一个空行,查阅python3文档,发现有一个参数可以设置.特此记录一下. with open('file.csv','a',newline='') as csv ...

  6. ubuntu 重启命令,ubuntu 重启网卡方法

    ubuntu 重启命令 重启命令:1.reboot2.shutdown -r now 立刻重启(root用户使用)3.shutdown -r 10 过10分钟自动重启(root用户使用)4.shutd ...

  7. linux2.6硬盘扇区直接读写程序

    下面的程序可以在linux2.6内核直接读写硬盘的指定扇区,也是根据网上一个朋友的做法做了修改的: 有两个不是很明白的地方就是:1.bd_claim函数的使用,这个是个递归函数,像是匹配内存指针和设备 ...

  8. C# GUID介绍和的使用

    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...

  9. 芝麻HTTP:redis-py的安装

    对于Redis来说,我们要使用redis-py库来与其交互,这里就来介绍一下它的安装方法. 1. 相关链接 GitHub:https://github.com/andymccurdy/redis-py ...

  10. C# 找出泛型集合中的满足一定条件的元素 List.Wher()

    在学习的过程中,发现泛型集合List<T>有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享. 1.关于Func<> Fun ...