RESTEasy简介
接上一篇《JAX-RS规范的版本.实现.jar对应关系》,我们已经知道RESTEasy是JAX-RS规范的实现,本篇内容告诉我们该怎样去使用它。
常用注解
RESTEasy以jaxrs-api.jar包为基础对JAX-RS进行实现,该包中包含了JAX-RS规范所声明的注解。
注解列表
这里我们根据3.0.7.Final这一版本对一些常用注解进行说明,以下是注解列表,请进行参考阅读:
@ApplicationPath | 标注资源的root路径,加载子资源文件 | value |
@Path | 标注普通资源路径 | value |
@GET | 获取 | |
@POST | 添加 | |
@PUT | 整体更新 | |
@PATCH | 部分更新(resteasy中并没有) | |
@DELETE | 删除 | |
@PathParam | 资源路径参数 | value |
@QueryParam | 资源请求参数 | value |
@MatrixParam | 标注请求资源key-value类型的参数 | value |
@FormParam | 标注表单参数 | value |
@Encoded | 标注需要UrlEncode的元素 | |
@Context | 在参数列表注入系统级别参数javax.ws.rs.core.HttpHeaders, javax.ws.rs.core.UriInfo, javax.ws.rs.core.Request, javax.servlet.HttpServletRequest, javax.servlet.HttpServletResponse, javax.servlet.ServletConfig, javax.servlet.ServletContext, and javax.ws.rs.core.SecurityContext objects | |
@CookieParam | 标注需要获取的cookie参数 | value |
@Consumes | 指定client请求数据类型,与client的Content-Type匹配 | value[] |
@Produces | 指定client接收数据类型,与client的Accept匹配 | value[] |
@HeaderParam | 标注需要获取的header参数 | value |
@DefaultValue | 标注默认值 | value |
@Form | 标注表单对象,对象中的表单属性需要@FormParam进行标注 |
使用方法
@ApplicationPath
@ApplicationPath("operations")
public class OperationApplication extends Application {
private Set<Object> singletons=new HashSet<Object>();
public OperationApplication(){
singletons.add(new Library());
singletons.add(new BookStoreImpl());
}
@Override
public Set<Object> getSingletons(){
return singletons;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
在使用RESTEasy进行应用启动的时候,需要指明其请求根路径,这里既需要用到@ApplicationPath
注解。
新建一个资源处理类OperationApplication继承Application,
标注类级别注解@ApplicationPath
,用以声明根路径,
重写getSingletons()方法,用以获取资源容器
在构造器中加载Library和BookStoreImpl两份资源,只有在此添加的资源才能被访问
@Path,@GET,@PUT,@DELETE,@POST
@Path("/library")
public class Library {
@GET
//@PUT,@POST,@DELETE
@Path("/books")
public String getBooks(){
return "book list";
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
@Path是类与方法级别
使用@Path
注解标识访问路径,该路径基于@ApplicationPath
提供的根路径
@GET,@PUT,@DELETE,@POST为方法级别
这四个注解是http rest注解,用在实际动作上
@PathParam,@QueryParam
···
@PUT
@Path("/book/{isbn}")
public void addBook(@PathParam("isbn") String isbn, @QueryParam("name") String name){
System.out.println("add the book with name : "+name+", isbn : "+isbn);
}
@DELETE
@Path("/book/{var: .*}/{isbn}")
public void removeBook(@PathParam("isbn") String isbn,@PathParam("var") String var){
System.out.println(var);
System.out.println("the book with isbn : "+isbn+" has been removed");
}
···
通过声明@Pathparam
参数名可以更方便的获取路径上的参数,
路径参数可以直接声明,也可以声明后通过正则进行约束,如@Path("/book/{var: .*}/{isbn}")
,这里声明了var和isbn两个路径参数,var参数会捕获输入路径中满足冒号后正则的部分作为value
@POST
@Path("/book{multi}")
public void postBook(@PathParam("multi") PathSegment multi){
MultivaluedMap<String,String> paramMap =multi.getMatrixParameters();
Set<String> set=paramMap.keySet();
for (String key:set){
System.out.println(key+" : "+paramMap.get(key));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
上一片段对应的请求为:
POST http://localhost:8080/operations/library/book==;name=EJB 3.0;title=Bill Burke
- 1
- 2
- 3
通过PathSegment类的使用可以将路径参数进行map映射,按照上面的请求写法,会将参数name和title进行键值映射
@MatrixParam
@PUT
@Path("/books")
public void updateBook(@MatrixParam("name") String name,@MatrixParam("title") String title){
System.out.println("name :"+name+" ,title :"+title);
}
- 1
- 2
- 3
- 4
- 5
- 6
使用@MatrixParam可以获取下面这种资源写法的请求参数:
GET http://host.com/library/book;name=EJB 3.0;author=Bill Burke
- 1
- 2
- 3
@FormParam,@DefaultValue
@POST
@Path("/books-form1")
public void addBookByForm(@FormParam("name") @DefaultValue("yimmm") String name,@FormParam("title") String title){
System.out.println("name :"+name+" ,title :"+title);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
作为form提交的参数@FormParam
可以根据名称进行获取,@DefaultValue
在未传入相应参数时可以赋予其默认值
@Consumes
@POST
@Path("/books-form2")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void addBookByForm(MultivaluedMap<String,String> form){
Set<String> set=form.keySet();
for (String key:set){
System.out.println(key+" : "+form.get(key));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
@Consumes
对请求参数格式进行约束
在进行form提交时,MultivaluedMap
@Form
@POST
@Path("/books-form3")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void addBookByForm(@Form Book book){
System.out.println(book.getAuthor());
System.out.println(book.getTitle());
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
使用@Form
可以将form参数直接映射为对象 但是该对象需要进行相关标注。
新建Book.java,用@FormParam对其进行参数标注
,在资源中即可运用@Form
在参数列表中对Book book
进行标注,请求中的符合Book属性的参数会作为Book实例的属性被接收
public class Book {
@FormParam("author")
private String author;
@FormParam("title")
private String title;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
@Context,@Encoded
@GET
@Path("encodeTest/{name}")
public String testEncode(@Context javax.ws.rs.core.HttpHeaders headers,@PathParam("name") @Encoded String name){
return name;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
@Context在参数列表注入系统级别参数,如上,将javax.ws.rs.core.HttpHeaders进行嵌入。
@Encoded对当前的pathparam name进行urlencode,接收后的name参数是encode后的字符串
@Produces
@GET
@Path("/books")
@Produces({MediaType.APPLICATION_JSON,MediaType.TEXT_PLAIN})
public String getBooks(){
return "book list";
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
@Produces与@Consumes用法相同,只不过是进行返回数据格式的匹配,它们的参数为字符串数组
相关推荐
RestEasy与Netty结合使用,可以构建高性能的RESTful服务,摆脱传统的Servlet容器如Tomcat的依赖。RestEasy是JBoss公司开发的一个Java框架,它实现了JSR 311和JSR 339(Java API for RESTful Web Services)标准,...
RESTEasy框架通常使用注解的方式,让开发者能够以声明的方式定义资源和服务。资源类通常会使用`@Path`注解来定义访问路径,使用`@GET`、`@POST`、`@PUT`、`@DELETE`等注解来定义资源的方法。 RESTEasy还支持拦截器...
- **创建REST服务**:定义REST接口和实现,使用RestEasy的注解如`@Path`、`@GET`、`@POST`等。 - **注册服务**:在Spring配置中注册REST服务的实现,确保它能在Spring容器中被管理。 - **测试**:编写测试用例,验证...
整体而言,RESTEasy开发手册是一份全面的技术文档,它不仅涵盖了RESTEasy的基础知识和安装配置,还深入讲解了如何使用RESTEasy进行RESTful Web Services的开发,包括注解使用、资源配置、内容转换和安全机制等高级...
1. **JAX-RS兼容性**:RESTEasy是JAX-RS规范的实现者,这意味着你可以使用JAX-RS定义的注解(如`@Path`, `@GET`, `@POST`, `@PUT`, `@DELETE`等)来创建RESTful服务。 2. **注解驱动**:通过在类和方法上使用注解,...
Resteasy 使用这个库来理解并处理 JAX-RS 注解。 8. **commons-logging-1.0.4.jar**:Apache Commons Logging 是一个日志抽象层,允许开发者选择不同的日志实现。Resteasy 使用它来记录框架内部的事件和错误。 9. ...
在本文中,我们将深入探讨如何使用RESTEasy和Guice框架实现文件的上传与下载功能。RESTEasy是一个基于Java的RESTful Web服务实现,它与Java EE应用服务器集成,而Guice是Google提供的一款轻量级依赖注入框架,帮助...
在这个“resteasy helloworld demo”中,我们将探索如何使用 RESTEasy 创建一个简单的 REST 服务。首先,我们需要确保我们的开发环境已经配置了 Java 和 Maven,因为 RESTEasy 是基于这两个工具进行构建和运行的。 ...
而 Servlet 3.0 引入了注解驱动的部署,允许开发者直接在类或方法上使用 `@WebServlet` 和 `@Path` 注解,简化了 REST 服务的部署过程。RESTEasy 可以利用这种特性自动扫描并注册 REST 资源类,减少了配置文件的依赖...
1. **定义资源类**: 创建一个Java类,使用`@Path`注解声明资源路径,然后在方法上使用`@GET`、`@POST`等注解定义HTTP操作。 2. **绑定参数**: 使用`@PathParam`、`@QueryParam`、`@HeaderParam`等注解将HTTP请求的...
1. **自动注册**:这是最简单的方式,通过在你的类上使用JAX-RS注解,如`@Path`,RestEasy会自动扫描并注册这些服务。例如: ```java @Path("/hello") public class HelloResource { @GET public String sayHello...
3. **资源类(Resource Classes)**:在RestEasy实例中,你将看到使用`@Path`注解定义的Java类,这些类代表了RESTful服务的资源。例如,`@Path("/hello")`表示该类处理所有始于"/hello"的HTTP请求。 4. **HTTP方法...
本文将深入探讨如何使用RESTEasy返回JSON数据格式。 在RESTful服务中,JSON(JavaScript Object Notation)是一种广泛使用的数据交换格式,因为它轻量级且易于人类阅读和编写,同时也易于机器解析和生成。RESTEasy...
3. **类型安全的HTTP响应**:Resteasy允许开发者使用`@Produces`注解来声明资源可以返回的数据格式,如JSON、XML或纯文本,从而实现类型安全的响应。 4. **自动异常处理**:当服务端抛出异常时,Resteasy可以自动将...
在RESTEasy中,你可以直接使用JAXB注解来处理XML数据,比如在`UserType`类中使用`@XmlAccessorType`和`@XmlElement`等注解。 ```java package org.bluedash.resteasy; import javax.xml.bind.annotation....
1. **API支持**:Resteasy 2.1 GA遵循JAX-RS 1.1规范,提供了一组用于创建REST服务的注解,如`@Path`、`@GET`、`@POST`、`@QueryParam`等,这些注解使得代码更加简洁且易于理解。 2. **资源类**:通过在Java类上...
在使用RESTEasy时,通常需要依赖一些特定的jar包来支持其功能。以下是标题和描述中提到的几个关键jar包及其在RESTEasy中的作用: 1. **activation.jar**:这是JavaBeans Activation Framework (JAF)的一部分,用于...