Jersey介绍
Jersey是JAX-RS的参考实现,它包含三个主要部分,它可以帮助您实现RESTful Web服务.
核心服务器(Core Server):通过提供JSR 311中标准化的注释和API标准化,可以用直观的方式开发RESTful Web服务.核心客户端(Core Client):Jersey客户端API可以让我们与REST服务轻松通信.集(Integration):Jersey还提供可以轻松集成Spring,Guice,Apache Abdera的库.
Jersey spring整合
Web集成:在web.xml中加入servlet,见配置
<!-- 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>
spring集成:将所需要的jar增加至classpath中,见maven pom.xml配置
<!-- rest begin --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>${version.jersey}</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>${version.jersey}</version> </dependency> <dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-spring</artifactId> <version>${version.jersey}</version> <!-- 去除自带的spring版本 --> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <artifactId>spring-web</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <!-- rest end -->
示例详解
先看一个最简单的例子
@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前后是否有”/”,都不会有影响,但如果你启用了重定向机制,则上面的规则无效.
@GET注解是请求方法指示符,这个指示符注解的Java方法会处理HTTP GET请求.
@Produces注解用于指定MIME类型,通常与MediaType联用,可定义在方法区或者类定义上.
若方法区上与类定义上都指定了@Produces,那么方法区上的@Produces会覆盖掉类定义上的@Produces.
@QueryParam注解用于从请求的URL中提取查询参数,且只能在get请求中使用,@QueryParameter可以转换任何有以String为参数的构造函数类.
@DefaultValue注解表示如果url中参数不存在,则会按DefaultValue给定值赋值,如果url中给定值不是给定类型,则会报404错误.
@Path("save") @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void saveUser(@FormParam("id") String id, @FormParam("username") String username, @Context HttpServletRequest request, @Context HttpServletResponse response) { log.debug("id:{}, username:{}", id, username); log.debug("request:{}, response:{}", request, response); }
@Consumes注解指定了客户端发送的MIME媒体类型,与@Produces一样,通常与MediaType联用,并且可定义在方法区或者类定义上.
@POST注解是请求方法指示符,这个指示符注解的Java方法会处理HTTP POST请求.
@Context注解是注入上下文对象,如Request,Response,UriInfo,Servlet,Context等.
@FormParam注解用于POST请求,@QueryParam用于GET请求,作用与@QueryParam一样.
返回结果
直接返回对象,用@Produces控制输出的格式为Html/Xml/JSON等.
返回Response对象,根据不同的输入参数,决定返回Xml/JSON.
当然,你也可以选择使用JAXB,它可以很方便将其序列化为XML,JSON,当然如果选择使用JSON,你需要使用jackson.
@XmlRootElement public class User { private int id; private String username; public User() { } public User(int id, String username) { this.id = id; this.username = username; } // setter getter // ... }
异常处理
最简单的抛一个干净的500错误,throw new WebApplicationException();
如果需要自定义错误返回码和错误信息,可以使用如下方法
new WebApplicationException(Response.status(status).entity(message).type(MediaType.TEXT_PLAIN).build());
相关推荐
CXF+spring+restful创建一个web的接口项目源代码,添加了restful实现的配置及jar包
flutter编程语言+JAVAspring+Web服务+RESTful API**:这是一个关于JAVAspring编程语言的Web服务的RESTful API的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的Web服务的概念、原理和作用,以及如何...
使用Spring 实现RESTful Web 服务 demo
Maven项目构建: SpringMVC + Mybatis + SpringSecurity(权限控制到方法按钮) + Rest(服务) + Webservice(服务) + Quartz(定时调度)+ Lucene(搜索引擎) + HTML5 bootstrap 源码详细地址:...
使用Spring构建Restful的Web服务.pdf
利用CXF3.0.2+Spring3.2.14发布RESTFul,传递json数据格式的!需要源代码可以下载!
利用CXF3.0.2+Spring3.2.14发布RESTFul,有源代码可以下载!
NULL 博文链接:https://liangyingying1117.iteye.com/blog/2155855
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务;SwaggerUI+SpringMVC构建RestFulAPI的可视化界面
springboot+mybatis+restful 整合的demo,基于idea的工程
这是一个restful风格的webservice框架,使用官方的jersey 整合mybatis和spring,需要用tomcat8才能运行,
ssm+maven+mybatis注解+mysql+restful,Java1.7,tomcat8.0.6以上。我实在是被各种版本不兼容恶心到了,如果你也一样,恭喜你找到了这个项目,此项目各种兼容性已经被调整到最佳。而且已经写了分页,数据库在src目录...
Java使用Jersey框架构建 RESTful Web服务返回json数据所需的jar包。Jackson-core-asl.jar / Jackson-jaxrs.jar / Jackson-mapper-asl.jar / Jackson-xc.jar / jersey-media-json-Jackson.jar
基于 spring2.5 hibernate3.3 jpa 的annotation注解来减少配置文件的大小 通过jersey实现restful形式请求
sort编程语言+JAVAspring+Web服务+RESTful API**:这是一个关于JAVAspring编程语言的Web服务的RESTful API的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的Web服务的概念、原理和作用,以及如何使用...
使用Spring+Maven 进行RESTFul风格WebServices接口开发
java jersey spring 集成 开发 restful API ,并将restful 返回的数据以JSON的格式返回,开发非常简单,易懂。欢迎小伙伴们 下载资源。
一个 Maven 原型,用于快速设置由 Jetty + Jersey + Spring DI 提供支持的 RESTful web 服务 为什么是 Maven 原型? 因为我很懒,我想有一个简单的方法来快速启动 REST 服务器并开始原型设计。 原型创造了什么? ...
spring + cxf + restful 方便初学者很快上手。 采用post和get请求两种方式。,
Jersey和Tomcat构建RESTful WebService及其调用