JAX-RS入门 五: 自动类型转换
2015-07-13 00:00
447 查看
一、默认类型转换规则
在上一节中,已经了解了怎么使用那个annotations去提取请求中各种信息,不过得到的信息值默认都是一个string类型。
这一节介绍JAX-RS一些内置的自动类型转换及其规则。
理论上JAX-RS可以将请求信息转换成任一Java类型,只要该Java类型满足以下条件之一:
基本类型: int、short、float、double、byte、char 或 boolean 等
定义了带单个String参数的构造方法
拥有一个static的valueOf(String)方法,并且这个方法返回这个类型的一个实例
java.util.List<T>、java.util.Set<T>或java.util.SortedSet<T>,其中 T 满足条件2或者3,或者是一个String
例如:
如果转换失败,则认为client请求出错,返回一个404错误。
二、定义缺省值 @DefaultValue
通过使用@DefaultValue注释,可以给某个请求参数定义缺省值,当client的请求中未包含此参数,则缺省参数值将被使用,例如:
如果请求中未提供 start 请求参数,则缺省值0将被使用;如果请求中未包含 size 参数,则缺省值10被使用。
三、强制不解码 @Encoded
使用@Encoded注释,用来告诉JAX-RS,不需要自动解码,直接使用编码后的请求值,例如:
在上一节中,已经了解了怎么使用那个annotations去提取请求中各种信息,不过得到的信息值默认都是一个string类型。
这一节介绍JAX-RS一些内置的自动类型转换及其规则。
理论上JAX-RS可以将请求信息转换成任一Java类型,只要该Java类型满足以下条件之一:
基本类型: int、short、float、double、byte、char 或 boolean 等
定义了带单个String参数的构造方法
拥有一个static的valueOf(String)方法,并且这个方法返回这个类型的一个实例
java.util.List<T>、java.util.Set<T>或java.util.SortedSet<T>,其中 T 满足条件2或者3,或者是一个String
例如:
@GET @Path("{id}") public String get(@PathParam("id") int id) {...}
@Path("/myservice") public class MyService { <span style="white-space:pre"> </span>@GET <span style="white-space:pre"> </span>@Produces("text/html") <span style="white-space:pre"> </span>public String get(@HeaderParam("Referer") URL referer) { <span style="white-space:pre"> </span>... <span style="white-space:pre"> </span>} }
public enum Color { BLACK, BLUE, RED, WHITE, SILVER } @GET @Path("/{model}/{year}") @Produces("image/jpeg") public Jpeg getPicture(@PathParam("make") String make, @PathParam("model") String model, @MatrixParam("color") Color color) { ... }转list:
import java.util.List; @Path("/customers") public class CustomerResource { @GET @Produces("application/xml") public String getCustomers( @QueryParam("start") int start, @QueryParam("size") int size, @QueryParam("orderBy") List<String> orderBy) { ... } } 输入:GET /customers?orderBy=last&orderBy=first
如果转换失败,则认为client请求出错,返回一个404错误。
二、定义缺省值 @DefaultValue
通过使用@DefaultValue注释,可以给某个请求参数定义缺省值,当client的请求中未包含此参数,则缺省参数值将被使用,例如:
</pre><pre name="code" class="java">@Path("/customers") public class CustomerResource { @GET @Produces("application/xml") public String getCustomers(@DefaultValue("0") @QueryParam("start") int start, @DefaultValue("10") @QueryParam("size") int size) { ... } }
如果请求中未提供 start 请求参数,则缺省值0将被使用;如果请求中未包含 size 参数,则缺省值10被使用。
三、强制不解码 @Encoded
使用@Encoded注释,用来告诉JAX-RS,不需要自动解码,直接使用编码后的请求值,例如:
@GET @Produces("application/xml") public String get(@Encoded @QueryParam("something") String str) {...}
相关文章推荐
- JAX-RS
- JAX-RS Simple SSE Sample
- MyEclipse开发JAX-RS架构WebServices收发JSON数据格式
- JAX-RS入门 一 :基础
- Java RESTful Web Service相关概念
- 使用 JAX-RS 简化 REST 应用开发
- 在Jersey中如何处理泛型集合
- JAX-RS
- 与Java Web Service相关的若干概念
- JAX-RS入门 一 :基础
- JAX-RS入门 四: 注入
- JAX-RS入门 三 :细节
- JAX-RS入门 二 :运行
- vert.x 结合JAX-RS
- SpringBoot + Mybatis + RESTful(Jersey)
- JAX-RS(Java API for RESTful Web Services)常用注解
- JAX-RS框架,使Tomcat启动即可执行类的方法
- CXF的前端应用简介
- JAX-RS -- Java API for RESTful Web Services