jax-rs注解工作原理介绍
2017-06-29 15:09
387 查看
基于 REST 的 Web 服务遵循一些基本的设计原则:
· 系统中的每一个对象或是资源都可以通过一个唯一的 URI 来进行寻址,URI 的结构应该简单、可预测且易于理解,比如定义目录结构式的 URI。
· 以遵循 RFC-2616 所定义的协议的方式显式地使用 HTTP 方法,建立创建、检索、更新和删除(CRUD:Create, Retrieve, Update and Delete)操作与 HTTP 方法之间的一对一映射:
若要在服务器上创建资源,应该使用 POST 方法;
若要检索某个资源,应该使用 GET 方法;
若要更改资源状态或对其进行更新,应该使用 PUT 方法;
若要删除某个资源,应该使用 DELETE 方法。
URI 所访问的每个资源都可以使用不同的形式加以表示(比如 XML 或者 JSON),具体的表现形式取决于访问资源的客户端,客户端与服务提供者使用一种内容协商的机制(请求头与 MIME 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。
@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型.您可以使用它们来绑定根资源或子资源内的
Java 方法与 HTTP
请求方法。HTTP GET
请求被映射到由 @GET
注释的方法;HTTP POST
请求被映射到由 @POST
注释的方法
@Produces,标注返回的MIME媒体类型
@Consumes,标注可接受请求的MIME媒体类型
@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,
@PathParam来自于URL的路径,
@QueryParam来自于URL的查询参数,
@HeaderParam来自于HTTP请求的头信息,
@CookieParam来自于HTTP请求的Cookie。
如果使用 POST 方法请求资源”/account”,则 createAccount 方法将被调用,JSON 格式的请求体被自动映射为实体参数 account。
而我们bos项目中的
这个方法只是在程序中对它进行了调用,
这里使用了get的方式
各种请求方式的区别请查看:http
几种请求方法的差别.doc
通过查看源码发现,
所有的请求方式都变成了同一个字符串
Annotations仅仅是元数据,和业务逻辑无关。理解起来有点困难,但就是这样。如果Annotations不包含业务逻辑,那么必须有人来实现这些逻辑。元数据的用户来做这个事情。Annotations仅仅提供它定义的属性(类/方法/包/域)的信息。Annotations的用户(同样是一些代码)来读取这些信息并实现必要的逻辑。
当我们使用Java的标注Annotations(例如@Override)时,JVM就是一个用户,它在字节码层面工作。
J2SE5.0版本在 java.lang.annotation提供了四种元注解,专门注解其他的注解:
@Documented –注解是否将包含在JavaDoc中
@Retention –什么时候使用该注解
@Target? –注解用于什么地方
@Inherited – 是否允许子类继承该注解
@Documented–一个简单的Annotations标记注解
b7dc
,表示是否将注解信息添加在java文档中。
@Retention– 定义该注解的生命周期。
RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
@Target – 表示该注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给7个属性都添加注解,仅仅排除一个属性,那么你需要在定义target包含所有的属性。
ElementType.TYPE:用于描述类、接口或enum声明
ElementType.FIELD:用于描述实例变量
ElementType.METHOD
ElementType.PARAMETER
ElementType.CONSTRUCTOR
ElementType.LOCAL_VARIABLE
ElementType.ANNOTATION_TYPE 另一个注释
这是一个运行时的注解,也就是说jvm虚拟机根据这个注解判断用户使用的是什么请求方式,跳转到对应的url地址,实际上底层的请求方式都变成了同一个字符串
· 系统中的每一个对象或是资源都可以通过一个唯一的 URI 来进行寻址,URI 的结构应该简单、可预测且易于理解,比如定义目录结构式的 URI。
· 以遵循 RFC-2616 所定义的协议的方式显式地使用 HTTP 方法,建立创建、检索、更新和删除(CRUD:Create, Retrieve, Update and Delete)操作与 HTTP 方法之间的一对一映射:
若要在服务器上创建资源,应该使用 POST 方法;
若要检索某个资源,应该使用 GET 方法;
若要更改资源状态或对其进行更新,应该使用 PUT 方法;
若要删除某个资源,应该使用 DELETE 方法。
URI 所访问的每个资源都可以使用不同的形式加以表示(比如 XML 或者 JSON),具体的表现形式取决于访问资源的客户端,客户端与服务提供者使用一种内容协商的机制(请求头与 MIME 类型)来选择合适的数据格式,最小化彼此之间的数据耦合。
@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型.您可以使用它们来绑定根资源或子资源内的
Java 方法与 HTTP
请求方法。HTTP GET
请求被映射到由 @GET
注释的方法;HTTP POST
请求被映射到由 @POST
注释的方法
@Produces,标注返回的MIME媒体类型
@Consumes,标注可接受请求的MIME媒体类型
@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,
@PathParam来自于URL的路径,
@QueryParam来自于URL的查询参数,
@HeaderParam来自于HTTP请求的头信息,
@CookieParam来自于HTTP请求的Cookie。
@Path("/account/") @POST @Consumes("application/json") public Response createAccount(Account account) { ...... } |
如果使用 POST 方法请求资源”/account”,则 createAccount 方法将被调用,JSON 格式的请求体被自动映射为实体参数 account。
而我们bos项目中的
// 如果用户没有绑定手机,那就执行绑定操作 @Path("/customer/updatetype/{telephone}") @GET public void updateType(@PathParam("telephone") String telephone); |
这里使用了get的方式
|
各种请求方式的区别请查看:http
几种请求方法的差别.doc
通过查看源码发现,
所有的请求方式都变成了同一个字符串
Annotations仅仅是元数据,和业务逻辑无关。理解起来有点困难,但就是这样。如果Annotations不包含业务逻辑,那么必须有人来实现这些逻辑。元数据的用户来做这个事情。Annotations仅仅提供它定义的属性(类/方法/包/域)的信息。Annotations的用户(同样是一些代码)来读取这些信息并实现必要的逻辑。
当我们使用Java的标注Annotations(例如@Override)时,JVM就是一个用户,它在字节码层面工作。
J2SE5.0版本在 java.lang.annotation提供了四种元注解,专门注解其他的注解:
@Documented –注解是否将包含在JavaDoc中
@Retention –什么时候使用该注解
@Target? –注解用于什么地方
@Inherited – 是否允许子类继承该注解
@Documented–一个简单的Annotations标记注解
b7dc
,表示是否将注解信息添加在java文档中。
@Retention– 定义该注解的生命周期。
RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
@Target – 表示该注解用于什么地方。如果不明确指出,该注解可以放在任何地方。以下是一些可用的参数。需要说明的是:属性的注解是兼容的,如果你想给7个属性都添加注解,仅仅排除一个属性,那么你需要在定义target包含所有的属性。
ElementType.TYPE:用于描述类、接口或enum声明
ElementType.FIELD:用于描述实例变量
ElementType.METHOD
ElementType.PARAMETER
ElementType.CONSTRUCTOR
ElementType.LOCAL_VARIABLE
ElementType.ANNOTATION_TYPE 另一个注释
这是一个运行时的注解,也就是说jvm虚拟机根据这个注解判断用户使用的是什么请求方式,跳转到对应的url地址,实际上底层的请求方式都变成了同一个字符串
相关文章推荐
- Spring Boot 集成 resteasy篇 — jax-rs常用注解介绍
- JAX-RS规范-常用注解浅析
- 有关 JPQL 的教程:(这个教程包括了JEE5所有关键技术的介绍,包括 JAX-WS,JAX-RS,JAXB,JPA等等)
- 【REST】REST和JAX-RS相关知识介绍
- WebService(注解),CXF框架(jax-ws,Jax-rs,与spring整合)
- WebService --- JAX-RS注解和RESTful
- 【REST】REST和JAX-RS相关知识介绍
- JAX-RS介绍——Java API forRESTful WebServices,JAX-RS的目标是Web Services开发(这与HTML Web应用不同)而Spring MVC的目标则是Web应用开发
- REST Web 服务(二)----JAX-RS 介绍
- JAX-RS的常用注解
- 【REST】REST和JAX-RS相关知识介绍
- REST和JAX-RS相关知识介绍
- JAX-RS规范-常用注解浅析
- 框架 day64 WebService(注解),CXF框架(jax-ws,Jax-rs,与spring整合)
- jax-rs的注解使用
- JAX-RS规范-常用注解解析
- REST Web 服务介绍 JAX-RS规范和其实现RESTEasy
- 【REST】REST和JAX-RS相关知识介绍
- Spring Boot 集成 resteasy篇 — jax-rs初步介绍和spring boot集成
- RESTful Web Services -- JAX-RS中的注解