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服务。
希望这可以帮助!
翻译自: https://www.javacodegeeks.com/2014/03/creating-a-simple-jax-rs-messagebodywriter.html
jax-rs jax-ws
jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter相关推荐
- 创建一个简单的JAX-RS MessageBodyWriter
JAX-RS确实很酷,借助JAXB,只需添加带有JAXB批注的批注数据对象,即可为您转换许多响应数据类型. 我对JAXB相当陌生,但是一些简单的注释剪切/粘贴操作将带给您很长的路要走. 出于无法从JA ...
- 创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证.
创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证. 一.显示页面 新建一个登录页面,即login.jsp <%--Created by In ...
- 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母
<SQL Server数据库设计与项目实践> ISBN:978-7-302-40610-5 p121 动手实践-实训内容-(1) (1)创建一个简单的存储过程(RroGetA_Z),要求输 ...
- Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏
Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏 即使是现在,很多初学游戏开发的同学,在谈到Unity的时候,依然会认为Unity只能用于制作3D游戏的.实际上,Unity在2013年发布 ...
- Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
本文将演示如何利用namespace创建一个完整的容器,并在里面运行busybox.如果对namespace不是很熟悉,请先参考前面几遍介绍不同类型namespace的文章. busybox是一个Li ...
- Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序
参考:https://www.cnblogs.com/jliangqiu2016/p/7642471.html Windows下编译TensorFlow1.3 C++ library及创建一个简单的T ...
- WF4.0入门系列1——创建一个简单的工作流
WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...
- visjs使用小记-1.创建一个简单的网络拓扑图
1.插件官网:http://visjs.org/ 2.创建一个简单的网络拓扑图 <!doctype html> <html> <head><title> ...
- idea建立一个java工程_IntelliJ IDEA(三、各种工程的创建 -- 之一 -- 创建一个简单的Java工程)...
一.创建一个简单的Java工程:HelloWorld 1. Eclipse的第一步是选择工作空间,然后创建项目: IDEA不同(没有工作空间的概念),第一步就直接创建具体的项目,项目创建过程中会选择在 ...
最新文章
- udacity 项目3人脸检测
- warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
- hadoop 启动提示输入password的问题
- pyQt4 for mac OS 10.8
- typescript 类型映射 (ReadOnly、Partial)
- Confluence 6 针对你的数据库类型确定校验 SQL
- 表达式如何获取复选框的值_Nuke表达式 Expression节点讲解
- Golang学习(12)——regex包
- Winform的html编辑控件htmleditor 有时候无法为里面HTML属性初始化
- 手机号微信检测方法案例分析
- 2021腾讯前端笔试实习生
- 数据科学和人工智能技术笔记 十八、Keras
- ceph存储 pg归置组处于stuck以及degraded状态解决方案
- [Zer0pts2020]easy strcmp
- iphone红外传感器
- Gephi安装教程及相关错误解决
- 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。 例如输入“I am a student”,则通过控制台输出“student a
- 5·12特别纪念 | 数据防“灾”,有“备”而来
- 搜遍全网,终于找到一个适合新手入门的物联网教程
- 为什么需要强制类型转换