jax-rs jax-ws

JAX-RS确实很棒,借助JAXB,只需添加带有JAXB批注的批注数据对象,即可为您转换许多响应数据类型。 我对JAXB相当陌生,但是一些简单的注释的剪切/粘贴操作将带给您很多帮助。

出于无法从JAX-RS资源方法返回该数据类型的目的,可能有某些类型的数据无法注释或不会注释。 一个简单的示例是返回布尔(原始)或包装器布尔类。 我在StackOverflow上读了一个问题,有人问他们是否可以从资源方法返回布尔值,由于我不知道答案,所以我决定尝试一下! 我的版本仅返回XML,而不返回JSON,但您应该明白这一点。

我从《泽西岛用户指南》的HelloWorld示例开始,然后从那里开始进行修改。 我使用了pom.xml,唯一的变化是取消注释了一个块以允许使用JSON。

主班

该类来自Hello World示例,没有任何更改。

package com.example;import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;import java.io.IOException;
import java.net.URI;/*** Main class.**/
public class Main {// Base URI the Grizzly HTTP server will listen onpublic static final String BASE_URI = "http://localhost:8080/myapp/";/*** Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.* @return Grizzly HTTP server.*/public static HttpServer startServer() {// create a resource config that scans for JAX-RS resources and providers// in com.example packagefinal ResourceConfig rc = new ResourceConfig().packages("com.example");// create and start a new instance of grizzly http server// exposing the Jersey application at BASE_URIreturn GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);}/*** Main method.* @param args* @throws IOException*/public static void main(String[] args) throws IOException {final HttpServer server = startServer();System.out.println(String.format("Jersey app started with WADL available at "+ "%sapplication.wadl\nHit enter to stop it...", BASE_URI));System.in.read();server.stop();}
}

资源类别

我创建了一个资源类,其中包括一个GET方法返回一个布尔值,另一个GET方法返回包装布尔值类。 注意,getBool()和getBoolean()方法将XML作为第一个选项。

package com.example;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;/*** Root resource (exposed at "myresource" path)*/
@Path("myresource")
public class MyResource {/*** Method handling HTTP GET requests. The returned object will be sent* to the client as "text/plain" media type.** @return String that will be returned as a text/plain response.*/@GET@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})public String getIt() {return "Got it!";}@GET@Path("/bool")@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})public boolean getBool() {return false;}@GET@Path("/Boolean")@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})public Boolean getBoolean() {return Boolean.TRUE;}
}

BooleanMessageBodyWriter类

这是有趣的部分,创建MessageBodyWriter类以允许资源方法返回布尔值或布尔值的XML。

package com.example;import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.WebApplicationException;
import java.io.IOException;
import java.io.InputStream;
import java.io.DataOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;@Provider
@Produces("application/xml")
public class BooleanMessageBodyWriter implements MessageBodyWriter{@Overridepublic boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {System.out.println("isWriteable called...");return type == Boolean.class;}@Overridepublic long getSize(Boolean myBool, Class type, Type genericType,Annotation[] annotations, MediaType mediaType) {// deprecated by JAX-RS 2.0 and ignored by Jersey runtimereturn 0;}@Overridepublic void writeTo(Boolean myBool,Class type,Type genericType,Annotation[] annotations,MediaType mediaType,MultivaluedMaphttpHeaders,OutputStream entityStream)throws IOException, WebApplicationException {StringBuilder sb = new StringBuilder();sb.append("").append(myBool.toString()).append("");DataOutputStream dos = new DataOutputStream(entityStream);dos.writeUTF(sb.toString());}
}

我以前没有使用过Maven,但是在安装maven之后,以下目标是编译和运行项目所需的全部(当然!)。

  • mvn compile –编译代码
  • mvn exec:java –启动Grizzly HttpServer并部署Restful服务。

希望这可以帮助!

参考:从我们的JCG合作伙伴 Mike Miller在Scratching我的编程痒博客上创建一个简单的JAX-RS MessageBodyWriter 。

翻译自: https://www.javacodegeeks.com/2014/03/creating-a-simple-jax-rs-messagebodywriter.html

jax-rs jax-ws

jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter相关推荐

  1. 创建一个简单的JAX-RS MessageBodyWriter

    JAX-RS确实很酷,借助JAXB,只需添加带有JAXB批注的批注数据对象,即可为您转换许多响应数据类型. 我对JAXB相当陌生,但是一些简单的注释剪切/粘贴操作将带给您很长的路要走. 出于无法从JA ...

  2. 创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证.

    创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证. 一.显示页面 新建一个登录页面,即login.jsp <%--Created by In ...

  3. 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母

    <SQL Server数据库设计与项目实践> ISBN:978-7-302-40610-5 p121 动手实践-实训内容-(1) (1)创建一个简单的存储过程(RroGetA_Z),要求输 ...

  4. Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏 即使是现在,很多初学游戏开发的同学,在谈到Unity的时候,依然会认为Unity只能用于制作3D游戏的.实际上,Unity在2013年发布 ...

  5. Linux Namespace系列(09):利用Namespace创建一个简单可用的容器

    本文将演示如何利用namespace创建一个完整的容器,并在里面运行busybox.如果对namespace不是很熟悉,请先参考前面几遍介绍不同类型namespace的文章. busybox是一个Li ...

  6. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

    参考:https://www.cnblogs.com/jliangqiu2016/p/7642471.html Windows下编译TensorFlow1.3 C++ library及创建一个简单的T ...

  7. WF4.0入门系列1——创建一个简单的工作流

    WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...

  8. visjs使用小记-1.创建一个简单的网络拓扑图

    1.插件官网:http://visjs.org/  2.创建一个简单的网络拓扑图 <!doctype html> <html> <head><title> ...

  9. idea建立一个java工程_IntelliJ IDEA(三、各种工程的创建 -- 之一 -- 创建一个简单的Java工程)...

    一.创建一个简单的Java工程:HelloWorld 1. Eclipse的第一步是选择工作空间,然后创建项目: IDEA不同(没有工作空间的概念),第一步就直接创建具体的项目,项目创建过程中会选择在 ...

最新文章

  1. udacity 项目3人脸检测
  2. warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
  3. hadoop 启动提示输入password的问题
  4. pyQt4 for mac OS 10.8
  5. typescript 类型映射 (ReadOnly、Partial)
  6. Confluence 6 针对你的数据库类型确定校验 SQL
  7. 表达式如何获取复选框的值_Nuke表达式 Expression节点讲解
  8. Golang学习(12)——regex包
  9. Winform的html编辑控件htmleditor 有时候无法为里面HTML属性初始化
  10. 手机号微信检测方法案例分析
  11. 2021腾讯前端笔试实习生
  12. 数据科学和人工智能技术笔记 十八、Keras
  13. ceph存储 pg归置组处于stuck以及degraded状态解决方案
  14. [Zer0pts2020]easy strcmp
  15. iphone红外传感器
  16. Gephi安装教程及相关错误解决
  17. 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。 例如输入“I am a student”,则通过控制台输出“student a
  18. 5·12特别纪念 | 数据防“灾”,有“备”而来
  19. 搜遍全网,终于找到一个适合新手入门的物联网教程
  20. 为什么需要强制类型转换

热门文章

  1. 【jzoj】2018.2.5NOIP普及组——C组模拟赛
  2. AtCoder Beginner Contest 211 E - Red Polyomino(暴力+状态记录)
  3. 【dfs】拔河比赛(ybtoj dfs-1-1)
  4. art-template入门(三)之语法
  5. JAVA实现汉字转换为拼音 pinyin4j/JPinyin
  6. Oracle入门(十二)之SQL的DDL
  7. 使用相对长度单位em布局网页内容
  8. 《金色梦乡》金句摘抄(十一)
  9. 第二章 变量、数据类型和运算符
  10. java谓词_在Java中谓词