jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[渝粤教育] 江苏农牧科技职业学院 兽医文化 参考 资料

教育 -兽医文化-章节资料考试资料-江苏农牧科技职业学院【】 单元测验–兽医教育 1、【单选题】我国的兽医日为每年的 A、1月2日 B、10月28日 C、6月5日 D、7月31日 参考资料【 】 2、【单选题】执业兽医资格考试的总分为 A、100分 B、200分 C、300分 D、400分 参考资料【 】 3…

光纤收发器的详细选择方法

光纤收发器做为一个区域网络连接器设备,其主要的任务就是怎样很好地把两方数据进行无缝连接。所以必须考虑其与周边环境相互兼容性的配合,及本身产品的稳定性,所以大家在选择一定的考虑各方面因素问题。接下来就由飞畅科技的小编来为大家详细…

[渝粤教育] 江西科技师范大学 旅行社经营管理 参考 资料

教育 -旅行社经营管理-章节资料考试资料-江西科技师范大学【】 《第一章 旅行社企业概述》 单元测试题 1、【单选题】世界上第一家旅行社托马斯库克父子公司正式成立于( )年。 A、1845 B、1851 C、1838 D、1865 参考资料【 】 2、【单选题】一般认为,一个地区旅行社…

春天重新审视战略模式

这篇博客文章希望展示另一种方法,该方法如何通过依赖注入实现策略模式。 作为DI框架,我选择Spring框架 首先,让我们看一下如何以经典方式实施策略模式。 作为起点,我们有一个HeroController ,应该在HeroRepository添…

[渝粤教育] 沈阳农业大学 有机化学 参考 资料

教育 -有机化学-章节资料考试资料-沈阳农业大学【】 1.1 有机化合物和有机化学随堂测验 1、【单选题】下列化合物中,不是有机化合物的是( ) A、叶绿素 B、 氯仿 C、尿素 D、 氨气 参考资料【 】 2、【单选题】下列不是有机化合物的特点的是&a…

光纤收发器的选购原则介绍

光纤收发器做为一个区域网络连接器设备,其主要的任务就是怎样很好地把两方数据进行无缝连接。所以必须考虑其与周边环境相互兼容性的配合,及本身产品的稳定性、可靠性,反之:价格再低,也不能选用!那么,光纤收发器的选购…

[渝粤教育] 洛阳理工学院 基础素描 参考 资料

教育 -基础素描-章节资料考试资料-洛阳理工学院【】 第一章 单元测验 1、【单选题】开创学院派素描教学体系的画家是谁 A、达芬奇 B、卡拉奇兄弟 C、安格尔 D、丢勒 参考资料【 】 2、【单选题】以下哪个不是素描常用工具 A、油画棒 B、铅笔 C、素描纸 D、橡皮 参考资料【 】 3…

[渝粤教育] 潍坊职业学院 化工安全技术 参考 资料

教育 -化工安全技术-章节资料考试资料-潍坊职业学院【】 危险化学品单元测试 1、【单选题】《危险货物分类和品名编号》(GB6944-2012)把危险化学品分为( )类。 A、8 B、9 C、10 D、12 参考资料【 】 2、【单选题】扑救爆炸物品火灾…

光纤收发器让网络布线变的更方便

光纤收发器是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元,在很多地方也被称之为光电转换器。光纤收发器的应用让网络布线变的更方便,接下来我们就跟随飞畅科技的小编来详细了解下吧! 企业在进行信息化基础…

maven和docker_与Maven和Docker的集成测试

maven和dockerDocker是其中的新热点之一。 与传统虚拟机相比,它具有一组不同的技术和思想,并通过容器的思想实现了相似但同时又有所不同的东西:几乎所有VM都具有强大的功能,但速度更快,并且还具有许多有趣的附加功能。…

[渝粤教育] 盐城师范学院 光学 参考 资料

教育 -光学-章节资料考试资料-盐城师范学院【】 判断题 1、【判断题】1-1下列说法正确吗?(a)相干叠加服从波的叠加原理,非相干叠加不服从波的迭加原理。 A、正确 B、错误 参考资料【 】 2、【判断题】1-1下列说法正确吗&#xff1…

如何从使用环境上区别光纤收发器?

根据针对不同环境,就需求不同性质产品。光纤收发器也一样有工业级和商业级之分,但是又区别于市场上TP-LINGK和D-link等(这些是家庭使用的3C电子产品很低端,大部分是回收二手货元器件生产,客户群体及应用的环境不一样)。在使用环境…

[渝粤教育] 苏州科技大学 混凝土结构设计原理 参考 资料

教育 -混凝土结构设计原理-章节资料考试资料-苏州科技大学【】 第1章测试 1、【单选题】均布荷载作用下简支梁上部受压下部受拉的试验被称为 A、路标试验 B、钢标试验 C、混标试验 D、简支梁试验 参考资料【 】 2、【单选题】钢筋混凝土结构中钢筋主要受( &#xff…

保存您的lambda,以备不时之需-保存到文件

介绍 简短的帖子,描述了如何将Java lambda持久保存到文件中以在不同的过程中重复使用。 序列化Lambda Java 8中引入的Lambda使函数成为Java语言的一等公民(几乎)。 它们消除了使用专用类来保存函数的需要。 但是,这是如何进行的呢…

[渝粤教育] 西北工业大学 机械原理 参考 资料

教育 -机械原理-章节资料考试资料-西北工业大学【】 第一周单元测验 1、【单选题】手机属于。 A、机械 B、机构 C、机器 D、即不属机构,也不属机器 参考资料【 】 2、【单选题】下列常用装置哪些属于机器。 A、电动卷扬机 B、折叠烫衣板 C、手动窗扇开闭装置 D、汽车…

16槽双电源机架式光纤收发器产品优势介绍

双电源光纤收发器能满足远距离、高速、高宽带的快速以太网工作组用户的需要。产品性能稳定可靠,符合以太网标准,并具有防雷击保护措施。双电源光纤收发器适用于电信及各种宽带数据网要求高可靠性数据传输或组建IP数据传输专网的领域,是宽带校…

[渝粤教育] 西南交通大学 土木工程试验与量测技术 参考 资料

教育 -土木工程试验与量测技术-章节资料考试资料-西南交通大学【】 电阻应变片的粘贴及防潮工艺实验 1、【单选题】在测定石砌拱桥结构在车辆荷载作用下的应变时,最适合选用的应变传感器是() A、电阻应变片 B、手持式应变仪 C、振弦式应变计 …

aws iam 架构图_使用IAM保护您的AWS基础架构

aws iam 架构图在开发新产品并发现合适的产品市场时,每个团队都需要快速行动。 尤其是初创公司,因为公司的整个未来都取决于快速找到为您的产品付款的人。 对于初创企业和其他团队来说, Amazon Web Services是令人难以置信的工具&#xff0c…

百兆光纤收发器和千兆光纤收发器的区别

百兆光纤收发器(又名百兆光电转换器)是一种快速以太网转换器。光纤收发器全面兼容IEEE802.3、IEEE802.3u、IEEE802.1d标准。支持全双工、半双工、自适应三种工作模式。 千兆光纤收发器(又名光电转换器)是一种快速以太网&#xff…

[渝粤教育] 西南石油大学 建设法规 参考 资料

教育 -建设法规-章节资料考试资料-西南石油大学【】 第一章单元小测 1、【单选题】法律关系产生的前提是( ) A、公民的法律意识 B、法律的存在 C、交易的发生 D、物的转移 参考资料【 】 2、【单选题】下列民事行为中属于代理的是( )。 A、由于事务繁忙&…