- 浏览: 1222911 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (883)
- Spring (101)
- Swing (1)
- Mysql (21)
- Js (59)
- Jsp (2)
- Hibernate (19)
- Myeclipse (5)
- SqlServer 2000 (2)
- poi (15)
- Java (70)
- SSH (12)
- Html (47)
- Fusion Charts (1)
- C\C++ (2)
- 汇编 (36)
- Jquery (37)
- Struts2 (6)
- Ubuntu (16)
- powerDesinger (4)
- Jboss (3)
- JAX-RS (13)
- JAXB (5)
- JAX-WS (11)
- JMS (4)
- WebSocket (8)
- PHP (16)
- Flash (1)
- maven (3)
- Oracle (8)
- HttpClient (6)
- sqlserver (19)
- svn (5)
- Tomcat (3)
- Jdbc (3)
- EsayUi (11)
- 微信公众平台 (19)
- IIS (2)
- Freemarker (11)
- Comet (1)
- Spring MVC (85)
- JBoss Seam (3)
- 二维码 (9)
- Spring Security (4)
- Ehcache (3)
- Apache Shiro (7)
- jackson (16)
- JPA (8)
- jcaptcha (2)
- RSA (2)
- Ajax (6)
- 跟我学Shiro (0)
- Spring4 (19)
- 跟我学spring3 (0)
- css (32)
- excel (4)
- Filter (3)
- 微信公众帐号开发教程 (0)
- Android (6)
- log4j (6)
- 淘宝接口 (17)
- 支付集成 (3)
- 单点登录 (3)
- Html5 (27)
- 移动平台前端 (3)
- Linux (44)
- FusionCharts (27)
- Json Jackson Xml (5)
- 方培工作室-微信开发 (0)
- Apache与Tomcat与IIS整合 (10)
- Nginx (17)
- webService (2)
- apache (4)
- lucene (3)
- lodop (2)
- Shiro (3)
- zTree (2)
- ireport (12)
- Servlet3.0 (5)
- 前端美工 (19)
- AngularJS (1)
- C#开发微信门户及应用 (0)
- Shell (3)
- bat脚本 (16)
- Bootstrap (26)
- Less (10)
- photoshop (6)
- Redis (6)
- Mongodb (10)
- MyBatis (3)
- 数据结构 (0)
- 读写分离-主从复制 (0)
- JFinal (0)
- 百度地图api (3)
- hadoop-hbase-hive-spark (3)
- WebStorm (2)
- Quartz (5)
- ios (0)
- Mina (8)
- Android Studio (4)
- Ratchet教程 (0)
- 移动端重构系列 (1)
- cubic-bezier贝塞尔曲线CSS3动画工具 (1)
- nginx+tomcat+memcached集群 (0)
- 集群 (0)
- ZooKeeper (3)
- Dubbo (0)
- vpn (0)
- kafka (0)
- JVM垃圾回收机制 (0)
- 微信小程序 (0)
- Lua (0)
- Hystrix (0)
- Vue.js (0)
- mycat (0)
- Openresty (0)
- springBoot (0)
- 新分类 (0)
- guava (0)
- 大数据 (0)
- Sentinel (0)
最新评论
-
JackMacing:
中文怎么解决?
SpringMVC与iReport(JasperReports) 5.6整合开发实例 -
18335864773:
用pageoffice把.可以实现在线的文档操作.直接转pdf ...
转:使用jasperreport动态生成pdf,excel,html -
linhao0907:
推荐一款轻量开源的支付宝组件:https://github.c ...
关于Alipay支付宝接口(Java版) -
songronghu:
太好了,非常有用,谢谢分享~
Java ConcurrentModificationException 异常分析与解决方案 -
wzwahl36:
http://www.atool.org/json2javab ...
Java下利用Jackson进行JSON解析和序列化
接下来要花两小节来介绍一下JAX-RS中的数据处理(Data Handlers)部分。
一、SteamingOutput
在第一节中(http://zzc1684.iteye.com/blog/1674367),看getCustomer()方法:
- public StreamingOutput getCustomer(int id) {
- final Customer customer = customerDB.get(id);
- if (customer == null) {
- throw new WebApplicationException(Response.Status.NOT_FOUND);
- }
- return new StreamingOutput() {
- public void write(OutputStream outputStream) throws IOException,
- WebApplicationException {
- outputCustomer(outputStream, customer);
- }
- };
- }
其中使用了SteamingOutput来写一个原始流的字符流。
这是JAX-RS提供的数据处理的其中一种方式,通过回调SteamingOutput的write()方法来写回response。
相对于直接返回一个OutputSteam对象,使用回调对象有以下好处:
- JAX-RS可以自由的,按照它的设想处理输出
- 当追求性能时,甚至可以使用另一个线程而不是当前调用线程回写
- 可以很方便的注入拦截器,而使用一个直接的OutputSteam则通常会跳过这些步骤
- 最后,可以实现异步响应,类AJAX。在Servlet3.0中已经介绍了异常响应的想法。
二、InputSteam/Reader
可以使用InputSteam或Reader去处理请求内容,JAX-RS会自动将请求数据转成一个InputSteam/Reader对象,例如:
- @PUT
- @Path("/stuff")
- public void putStuff(InputStream is) {
- byte[] bytes = readFromStream(is);
- String input = new String(bytes);
- System.out.println(input);
- }
- @PUT
- @Path("/morestuff")
- public void putMore(Reader reader) {
- LineNumberReader lineReader = new LineNumberReader(reader);
- do {
- String line = lineReader.readLine();
- if (line != null) System.out.println(line);
- } while (line != null);
- }
除了处理请求,InputSteam/Reader也可以作为响应:
- @GET
- @Path("file/{fileName}")
- @Produces("text/plain")
- public Reader getFileContent(@PathParam("fileName") String fileName);
注:当作为响应时,需要指定@Produces,这样JAX-RS才知道怎么去设置响应的Content-Type头信息
三、File
File对象也可以用在处理请求或响应中。例如用于请求:
- @POST
- @Path("/morestuff")
- public void post(File file) {
- Reader reader = new Reader(new FileInputStream(file));
- LineNumberReader lineReader = new LineNumberReader(reader);
- do {
- String line = lineReader.readLine();
- if (line != null) System.out.println(line);
- } while (line != null);
- }
这里File作为请求参数使用。
注:当使用File作为请求参数时,JAX-RS会在后台生成一个临时文件,以请求的信息体作为这个文件的内容,然后将这个临时文件作为参数传入。
用于响应:
- private static final String basePath = "...";
- @GET
- @Path("{filepath: .*}")
- @Produces("text/plain")
- public File getFile(@PathParam("filepath") String path) {
- return new File(basePath + path);
- }
注:同样的,当File用作响应时,需要指定@Produces,用于告诉JAX-RS怎么转换File内容,即Content-Type。
四、byte[]
byte[]也可以用在请求或响应,例如:
- @GET
- @Produces("text/plain")
- public byte[] get() {
- return "hello world".getBytes();
- }
- @POST
- @Consumes("text/plain")
- public void post(byte[] bytes) {
- System.out.println(new String(bytes));
- }
注:当用作响应时,需要指定@Produces,用于告诉JAX-RS怎么设置响应的Content-Type值。
五、String/Char[]
大多数网络数据是基于文件格式的。JAX-RS可以进行任何文件格式的内容与String/Char[]之间的转换。例如:
- @GET
- @Produces("application/xml")
- public String get() {
- return "<customer><name>Bill Burke</name></customer>";
- }
- @POST
- @Consumes("text/plain")
- public void post(String str) {
- System.out.println(str);
- }
注:当用作响应时,需要指定@Produces,用于告诉JAX-RS怎么设置响应的Content-Type值。
注:JAX-RS规范要求实现者必须处理在Content-Type中指定的charset值,当注入String时,例如:
这里charset为UTF-8,实现者必须保证生成的Java String必须是UTF-8编码的。
六、MultivaluedMap<String, String> 和Form
在节4(http://liugang594.iteye.com/blog/1496651)中,已经介绍了使用@FormParam去获取提交的Form值。除了使用@FormParam,也可以直接注入MultivaluedMap<String,String>对象来表示所有请求的Form数据,其中Form数据格式是 "application/x-www-form-urlencoded",例如:
- @POST
- @Consumes("application/x-www-form-urlencoded")
- @Produces("application/x-www-form-urlencoded")
- public MultivaluedMap<String,String> post(
- MultivaluedMap<String, String> form) {
- return form;
- }
注:JAX-RS规范并未指明注入的MultivaluedMap是否已经编码;大多数实现者都会自动解码其中的key/value值。如果你想保持编码的格式,则可以使用@javax.ws.rs.Encoded注释。
七、javax.xml.transform.Source
Source接口代表了一个XML的输入或输出,它通常是用来进行XSLT转换的,例如:
- @Consumes("application/xml")
- @Produces("application/xml")
- public String post(Source source) {
- javax.xml.transform.TransformerFactory tFactory =
- javax.xml.transform.TransformerFactory.newInstance();
- javax.xml.transform.Transformer transformer =
- tFactory.newTransformer(
- new javax.xml.transform.stream.StreamSource("foo.xsl"));
- StringWriter writer = new StringWriter();
- transformer.transform(source,
- new javax.xml.transform.stream.StreamResult(writer));
- return writer.toString();
- }
除了JAXB(下节讲)外,javax.xml.transform.Source对象是规范中唯一支持的基于XML结构的对象。(甚至不能注入org.w3c.dom.Document对象)
发表评论
-
JAX-RS入门 十二: 可伸缩的JAX-RS应用
2012-09-11 19:10 689一、HTTP Caching HTTP1.0中定义了E ... -
JAX-RS入门 十一:HATEOAS
2012-09-11 19:09 730HATEOAS全称:超媒体即状态应用引擎 (Hypermedi ... -
JAX-RS入门 十: 兼容与演进
2012-09-11 19:09 848网络服务会随着时间 ... -
JAX-RS入门 九: 内容约定(2)
2012-09-10 23:33 628JAX-RS与Conneg JAX-RS有一些用来帮助 ... -
JAX-RS入门 九: 内容约定(1)
2012-09-10 23:32 652通常一个SOA的应用都需要足够的灵活,以便于各种不同的客户端或 ... -
JAX-RS入门 八: HTTP响应
2012-09-10 23:32 1023首先先看一下HTTP中定义的响应码及其意义: ... -
JAX-RS入门 七: 数据处理(2)
2012-09-10 23:31 864上节介绍了JAX-RS中怎么与一些基础的对象进行交互,这节介绍 ... -
JAX-RS入门 五: 自动类型转换
2012-09-09 12:41 702一、默认类型转换规则 在上一节中,已经了解了怎么使用那 ... -
JAX-RS入门 四: 注入
2012-09-09 12:39 1111一、Annotations @javax.ws.rs.Pa ... -
JAX-RS入门 三 :细节
2012-09-09 12:33 750一、若希望一个Java类能够处理REST请求,则这个类必须 ... -
JAX-RS入门 二 :运行
2012-09-09 12:31 961上一节,已经成功的定义了一个REST服务,并且提供了具体的 ... -
JAX-RS入门 一 :基础
2012-09-09 12:29 1745简介 JAX-RS是一套用java实现REST服务的规范,提 ...
相关推荐
本资源“JAX-RS入门jar包集合”包含了开始学习和使用JAX-RS所需的基本库文件,这些jar包将帮助开发者快速搭建REST服务环境。下面我们将详细讲解JAX-RS的核心概念和关键组件,以及如何利用这些jar包进行实际开发。 1...
2. JAX-WS入门:介绍如何使用JAX-WS创建SOAP服务,包括服务端点接口、消息处理和部署描述符的配置。 3. JAX-WS高级特性:探讨服务端点实现、异常处理、消息传递模式和WS-Security等进阶话题。 4. JAX-RS基础:学习...
【快速入门JAX-RS】 JAX-RS是Java API for RESTful Web Services的缩写,它是Java平台上的一个标准,用于构建RESTful Web服务。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,...
2. **JAX-RS**: JAX-RS是处理RESTful服务的Java标准。CXF提供了对JAX-RS的强大支持,允许开发者使用注解来快速创建资源类,定义HTTP方法和URL映射,从而构建RESTful服务。 【WebService视频教程内容预览】 在...
此外,它还支持JAX-RS(Java API for RESTful Web Services)和JAX-WS(Java API for XML Web Services),使得开发RESTful服务和SOAP服务变得简单。 8. **安全性**: CXF提供了多种安全机制,如基本认证、OAuth、...
Web服务(WebService)是一种基于网络的、松散耦合的软件模块,允许不同系统之间进行交互和数据交换。在Java中实现Web服务,通常使用SOAP(Simple Object Access Protocol)或REST(Representational State Transfer...
5. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行XML到Java对象的自动转换,简化了XML数据的处理。 6. **安全与认证**:文档可能涵盖了如何在CXF中集成安全机制,如WS-Security、OAuth2或...
本示例“JAXRS-HelloWorld”是学习JAX-RS基础知识的一个经典入门项目。 首先,我们来看一下这个项目的目录结构。根据提供的压缩包文件名“JAXRS-HelloWorld-master”,我们可以推测这是一个Git仓库的克隆,通常包含...
4. **JAX-RS**:Java API for RESTful Web Services,用于创建RESTful服务。 5. **SOAP**:支持1.1和1.2版本,以及WS-I Basic Profile、WS-Security、WS-Addressing等规范。 6. **WSDL**:Web服务描述语言,用于定义...
4. JAX-RS教程:JAX-RS利用HTTP方法(如GET、POST、PUT和DELETE)和资源URI来处理请求。学习如何使用@Path、@GET、@POST等注解创建REST服务,并理解JSON和XML之间的转换。 5. 客户端调用:无论是SOAP还是REST服务,...
1. **Servlet和JAX-RS**:Java中的API通常通过HTTP服务器进行通信,这可能需要使用Servlet或JAX-RS(Java API for RESTful Web Services)来创建RESTful API。Servlet处理HTTP请求,而JAX-RS则简化了创建REST服务的...
SOAP允许开发者传递复杂的数据结构,并提供了错误处理机制。 2. **WSDL**:WSDL文档定义了Web Service的接口,包括服务提供的操作、消息格式、输入/输出参数、地址等信息。服务消费者通过读取WSDL可以知道如何与...
- Jersey是JAX-RS(Java API for RESTful Web Services)的参考实现,用于创建RESTful服务。 - 注解驱动:使用@Path、@GET、@POST等注解来标记资源类和方法。 - 使用Response和Entity:返回HTTP响应,包括状态码...
JAX-WS支持多种协议,包括SOAP、WSDL和UDDI,能够处理XML数据并进行网络通信。 2. **Web服务生命周期** - **创建服务端**:首先,我们需要定义一个Java接口,该接口将作为Web服务的API。然后,使用JAX-WS的注解...
Java中,JAX-RS(Java API for RESTful Web Services)是用于构建RESTful服务的标准API。 - 定义资源类:创建Java类表示资源,并使用`@Path`注解指定资源路径。 - 方法注解:在类的方法上使用`@GET`, `@POST`, `@...
1. 使用Apache CXF或Jersey创建JAX-RS服务,实现RESTful API。 2. 使用Spring Boot创建基于JAX-WS的SOAP服务,利用注解简化配置。 六、学习资源 1. "web+service入门教程ppt":这份PPT资料将深入浅出地介绍Web服务...
- **数据绑定**:CXF支持多种数据绑定机制,如JAXB、Aegis等,方便处理XML和Java对象之间的转换。 - **MTOM/XOP**:支持Message Transmission Optimization Mechanism,可以提高大文件传输的效率。 - **国际化与本地...
CXF是基于Apache基金会的项目,它提供了SOAP、RESTful、JAX-RS、JAX-WS等接口的支持,可以方便地创建Web服务。CXF的核心功能包括服务建模、绑定生成、服务实现和部署,以及客户端代理和服务代理的生成。它的设计...
- Apache CXF:一个智能的Web服务套件(包括JAX-WS和JAX-RS)。 - Apache Karaf:一个小型的基于OSGi的运行时环境,其中可以部署容器代理的应用程序。 - Apache MINA:一个高性能的NIO驱动的网络框架。 Camel的核心...
1. **Getting Started(入门指南)** - **Creating a New Project from Maven Archetype(从 Maven Archetype 创建新项目)**:介绍如何使用 Maven archetype 快速搭建 Jersey 项目。 - **Exploring the Newly ...