Jersey1.8在spring环境下的实现 包括实例代码
来源:互联网 发布:2015房价知乎 编辑:程序博客网 时间:2024/05/21 10:23
下载地址: http://download.java.net/maven/2/com/sun/jersey/contribs/jersey-spring/
或官网
https://maven.java.net/content/repositories/releases/com/sun/jersey/contribs/jersey-spring/1.9/
所需包:
jersey-client-1.8.jar
jersey-core-1.8.jar
jersey-json-1.8.jar
jersey-server-1.8.jar
jersey-spring-1.8.jar
查了很多资料,最后选择了Restlet、Apache CXF、Jersey。
Restlet是抛弃了servlet api,自身实现了一些api,最关键的是没有提供spring的集成。
CXF很好,很强大,但是觉得它的json不爽,总是要先绕道jaxb。
Jersey是sun推出来的,很轻量、很环保、支持JAX-RS规范,据说要整合到jdk中去的。
最终权衡之下选择了Jersey。
Jersey的官方网站http://jersey.java.net/,相关文件可以在里面下载的。
1.资料,在线文档。
http://jersey.java.net/nonav/documentation/latest/getting-started.html
可以通过maven进行环境的搭建。
我没有使用maven的习惯,最后手工下载的,下载了好久,基本把所有插件都下载到了。
这边附近只能上传10M,上传一张相关的lib截图,需要的另外附上。
2.与spring集成
在classpath里里加入jersey-spring.jar,web.xml里面划一个url如/restapi/* 归Jersey的SpringServlet管即可。 然后SpringServlet就会在Spring的Context里查找支持某个具体path的Bean来出来处理请求。
- <!-- Jersey 配置 -->
- <servlet>
- <servlet-name>JerseyServlet</servlet-name>
- <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
- <init-param>
- <param-name>com.sun.jersey.config.property.packages</param-name>
- <!-- 系统启动时扫描的包的路径-->
- <param-value>com.tianque.locationtalk.api</param-value>
- <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
- <param-value>true</param-value>
- </init-param>
- </servlet>
3.参数支持和接口
@PathParam用来表示Restful风格下在URL中的id等标识。
@QueryParameter可以转换任何有以String为参数的构造函数的类,还可以设定defaultValue, 当参数为空时会自动抛异常
@POST+ @Consumes 以POST方式传递XML或JSON编码的Java对象
@Context UriInfo,@Context HttpHeaders, @Context HttpServletRequest 获取灵活的,不固定的参数. 可以从原版HttpServletRequest中获取,也可以用封装好的更方便的UriInfo和HttpHeaders.
4.使用Jackson处理JSON
在classpath里加入jersey-json.jar后,在服务端,web.xml里SpringServlet的定义要加入
<init-param><param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name><param-value><span class="code-keyword">true</span></param-value></init-param>
- package com.xxx.locationtalk.api;
- import javax.xml.bind.annotation.XmlRootElement;
- @XmlRootElement
- public class User {
- public Long userId;
- public String userName;
- public String nickName;
- public User(){
- }
- public User(Long userId,String userName,String nickName){
- this.userId =userId;
- this.userName=userName;
- this.nickName=nickName;
- }
- }
- package com.xxx.locationtalk.api;
- import java.io.UnsupportedEncodingException;
- import java.net.URLEncoder;
- import java.util.ArrayList;
- import java.util.List;
- import javax.ws.rs.GET;
- import javax.ws.rs.PUT;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.QueryParam;
- import javax.ws.rs.core.MediaType;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Scope;
- import org.springframework.stereotype.Component;
- import com.xxx.locationtalk.domain.MobileNumber;
- import com.xxx.locationtalk.service.MobileNumberService;
- @Component
- @Scope("request")
- @Path("/bookapi")
- public class BookService {
- @Autowired
- private MobileNumberService mobileNumberService;
- public MobileNumberService getMobileNumberService() {
- return mobileNumberService;
- }
- public void setMobileNumberService(MobileNumberService mobileNumberService) {
- this.mobileNumberService = mobileNumberService;
- }
- //外部传过来的参数
- @QueryParam("id") String userId;
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String helloWorld() {
- String ret = "Hello World!";
- return ret;
- }
- // 子路径
- @Path("getUsers")
- @GET
- @Produces( {MediaType.APPLICATION_XML })
- public List<User> getUsers() {
- List<User> users = new ArrayList<User>();
- for (long i = 1; i < 5; i++) {
- User user = new User();
- user.userId=(i);
- user.userName=("yuhan" + i);
- user.nickName=("supben" + i);
- users.add(user);
- }
- return users;
- }
- // 子路径
- @Path("getUserById")
- @GET
- @Produces( {MediaType.APPLICATION_JSON })
- public User getUsersById(){
- User user = new User();
- //使用spring的类读取数据库信息,随便赋值
- MobileNumber object=mobileNumberService.getMobileNumberById(Long.valueOf(userId));
- user.userId=object.getId();
- user.userName=object.getUsersName();
- user.nickName=object.getMobileNumber();
- return user;
- }
- @Path("getUserXmlById")
- @GET
- @Produces( {MediaType.APPLICATION_XML })
- public User getUsersByIdForXML(){
- User user = new User();
- MobileNumber object=mobileNumberService.getMobileNumberById(Long.valueOf(userId));
- user.userId=object.getId();
- user.userName=object.getUsersName();
- user.nickName=object.getMobileNumber();
- return user;
- }
- @Path("setUser")
- @PUT
- @Produces( {MediaType.APPLICATION_JSON })
- public User setUser(User user){
- if(user==null){
- System.out.println("数值为空!!");
- user.userId=(13486197987L);
- user.userName=("yuhan");
- user.nickName=("supben");
- }else{
- System.out.println("user.userId="+user.userId);
- System.out.println("user.userName="+user.userName);
- System.out.println("user.nickName="+user.nickName);
- user.userId=(user.userId);
- user.userName=(user.userName);
- user.nickName=(user.nickName);
- }
- return user;
- }
- // 子路径
- @Path("getUserByXML")
- @GET
- @Produces( {MediaType.APPLICATION_XML })
- public User getUserByIdWithXML() throws UnsupportedEncodingException{
- User user = new User();
- user.userId=(10000L);
- user.userName=URLEncoder.encode(("哈哈"), "utf-8");
- user.nickName=URLEncoder.encode(("老色狼"), "utf-8");
- return user;
- }
- }
- package com.xxx.locationtalk.api;
- import java.io.UnsupportedEncodingException;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.core.MultivaluedMap;
- import com.sun.jersey.api.client.Client;
- import com.sun.jersey.api.client.ClientResponse;
- import com.sun.jersey.api.client.WebResource;
- import com.sun.jersey.api.client.config.ClientConfig;
- import com.sun.jersey.api.client.config.DefaultClientConfig;
- import com.sun.jersey.api.json.JSONConfiguration;
- import com.sun.jersey.core.util.MultivaluedMapImpl;
- import com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider;
- public class ClientDemo{
- public static void main(String[] args) throws UnsupportedEncodingException{
- ClientConfig clientConfig = new DefaultClientConfig();
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
- Client c = Client.create(clientConfig);
- String url = "http://localhost:8080/api/bookapi";
- WebResource r = c.resource(url);
- User user = new User();
- user.userId=1000L;
- user.userName="江江123";
- user.nickName="老色狼";
- System.out.println("状态码="+r.path("setUser").accept(new String[] {MediaType.APPLICATION_JSON}).
- entity(user, MediaType.APPLICATION_JSON).put(ClientResponse.class).getStatus());
- MultivaluedMap<String, String> param = new MultivaluedMapImpl();
- param.add("userId", "10000");
- param.add("userName", "脏话");
- param.add("nickName", "脏话色狼");
- System.out.println(r.queryParams(param)
- .type(MediaType.APPLICATION_JSON).post(String.class));
- }
- }
附件包括
一张相关的jersey用到的所有lib截图
官方下载的最新jersey说明文档
官方下载的jersey1.8.zip,包括核心的lib以及doc
- Jersey1.8在spring环境下的实现 包括实例代码
- Jersey1.8在spring环境下的实现 包括实例代码
- Jersey1.8在spring环境下的实现 包括实例代码
- Jersey1.8在spring环境下的实现 包括实例代码
- Jersey在spring环境下的实现
- Jersey在spring环境下的实现
- Jersey在spring环境下的实现
- Linux下获取进程完整路径(包括进程名)——完整实例代码实现
- Windows环境下JNI的实现实例
- 在Spring的环境下使用SpringMVC
- 在Spring的环境下使用Spring MVC
- 在云环境下利用Teraproc集群即服务实现R代码的GPU加速
- python在win7下的环境(包括库文件的搭配)
- C++编程笔记:串口通信在windows环境和linux环境下的异同和代码实现
- Spring AOP的实现原理详解及代码实例
- Spring Data JPA实现分页Pageable的实例代码
- Eclipse环境下 spring MVC 入门实例
- Linux环境下oci代码实例
- Redis使用详细教程
- 图像聚类-K均值聚类
- Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
- Lex专栏:沃尔沃能否盘活资产?
- memcached安装
- Jersey1.8在spring环境下的实现 包括实例代码
- J2EE 2.0 Servlet 简介
- error: Malformed value for push.default: 无
- 计算机视觉基础1——视差与深度信息
- OpenGL ES渲染管线与着色器
- Android Studio获取控件ID
- 【leetcode】28. Implement strStr()
- Type mismatch: cannot convert from Test to Annotation
- static