继续学习jersey+spring 构建RESTful风格 webservice
jersey 都知道了,再说一下:
?
? ? =================================================================
?RESRTful 风格:
可寻址性(Addressability)?
无状态性(Statelessness)?
连通性(Connectedness)?
统一接口(Uniform Interface)?
面向资源(Resource Oriented)?
超文本驱动(Hypertext Driven)?
松耦合(Loosely Coupled)?
通过uri 进行资源命名 不管是(数据表,服务端资源等等),将资源上的操作映射到4种HTTP方法?。
?
?
?增加jersey + spring相关的jar
以及web。xml 配置
<!-- Jersey Servlet 配置 -->
<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JerseyServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
=======================================
示例简单代码
?
@Component
@Path("/user")
public class UserResource {
?
@Path("/users/{username}")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getUser(@PathParam("username") String username) {
log.debug("username:{}", username);
return username;
}
}
@Component注解定义此类为spring组件,即bean类.
@Path注解的值是一个相对的URI路径,值得注意的是你仍然可以在URI中嵌入变量,方法如下@Path(“/users/{username}”).
如果需要对userName进行规则匹配,可以自定义的正则表达式,它将覆盖默认的正则表达式”[^/]+”.
例如@Path(“users/{username: [a-zA-Z][a-zA-Z_0-9]}*”),这里username将只匹配一个大写或小写字母和零个或多个字母数字字符和下划线开头,如果给定参数不匹配,将出现404错误.
@Path中定义的URL前后是否有”/”,都不会有影响,但如果你启用了重定向机制,则上面的规则无效.
@pathparem中,URL中只出现参数的值,不是键值对,即url中的变量{var}对应的值
@GET注解是请求方法指示符,这个指示符注解的Java方法会处理HTTP GET请求.
@Produces注解用于指定MIME类型,通常与MediaType联用,可定义在方法区或者类定义上.
若方法区上与类定义上都指定了@Produces,那么方法区上的@Produces会覆盖掉类定义上的@Produces.
@QueryParam注解用于从请求的URL中提取查询参数,且只能在get请求中使用,@QueryParameter可以转换任何有以String为参数的构造函数类.
@DefaultValue注解表示如果url中参数不存在,则会按DefaultValue给定值赋值,如果url中给定值不是给定类型,则会报404错误.
@Consumes注解指定了客户端发送的MIME媒体类型,与@Produces一样,通常与MediaType联用,并且可定义在方法区或者类定义上.
@POST注解是请求方法指示符,这个指示符注解的Java方法会处理HTTP POST请求.
@Context注解是注入上下文对象,如Request,Response,UriInfo,Servlet,Context等.
@FormParam注解用于POST请求,@QueryParam用于GET请求,作用与@QueryParam一样.
当然,你也可以选择使用JAXB,它可以很方便将其序列化为XML,JSON,当然如果选择使用JSON,你需要使用jackson.
@XmlRootElementpublic class User {?private int id;?private String username;?public User() {}?public User(int id, String username) {this.id = id;this.username = username;}?// setter getter //...}
?