通过jersey-client客户端调用Jersey的Web服务模拟CURD
通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增、删、改、查等操作。
服务端主要是通过内存的方式,来模拟用户的增加、删除、修改、查询等操作。
二、创建服务端
1.在上文项目中,
在“com.waylau.rest.resources.UserResource“中修改代码,
首先创建一个HashMap,用来保存添加的用户
- private static Map<String,User> userMap = new HashMap<String,User>();
2.创建增、删、改、查 用户资源等操作
- /**
- * 增加
- * @param user
- */
- @POST
- @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public void createStudent(User user)
- {
- userMap.put(user.getUserId(), user );
- }
- /**
- * 删除
- * @param id
- */
- @DELETE
- @Path("{id}")
- public void deleteStudent(@PathParam("id")String id){
- userMap.remove(id);
- }
- /**
- * 修改
- * @param user
- */
- @PUT
- @Consumes(MediaType.APPLICATION_XML)
- public void updateStudent(User user){
- userMap.put(user.getUserId(), user );
- }
- /**
- * 根据id查询
- * @param id
- * @return
- */
- @GET
- @Path("{id}")
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public User getUserById(@PathParam("id") String id){
- User u = userMap.get(id);
- return u;
- }
- /**
- * 查询所有
- * @return
- */
- @GET
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public List<User> getAllUsers(){
- List<User> users = new ArrayList<User>();
- users.addAll( userMap.values() );
- return users;
- }
三、创建客户端程序
1.创建包“com.waylau.rest.client”,在包下建一个UserClient.java,代码如下:
- package com.waylau.rest.client;
- import javax.ws.rs.client.Client;
- import javax.ws.rs.client.ClientBuilder;
- import javax.ws.rs.client.Entity;
- import javax.ws.rs.client.WebTarget;
- import javax.ws.rs.core.MediaType;
- import javax.ws.rs.core.Response;
- import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
- import com.waylau.rest.bean.User;
- /**
- * 用户客户端,用来测试资源
- * @author waylau.com
- * 2014-3-18
- */
- public class UserClient {
- private static String serverUri = "http://localhost:8089/RestDemo/rest";
- /**
- * @param args
- */
- public static void main(String[] args) {
- addUser();
- getAllUsers();
- updateUser();
- getUserById();
- getAllUsers();
- delUser();
- getAllUsers();
- }
- /**
- * 添加用户
- */
- private static void addUser() {
- System.out.println("****增加用户addUser****");
- User user = new User("006","Susan","21");
- Client client = ClientBuilder.newClient();
- WebTarget target = client.target(serverUri + "/users");
- Response response = target.request().buildPost(Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
- response.close();
- }
- /**
- * 删除用户
- */
- private static void delUser() {
- System.out.println("****删除用户****");
- Client client = ClientBuilder.newClient();
- WebTarget target = client.target(serverUri + "/users/006");
- Response response = target.request().delete();
- response.close();
- }
- /**
- * 修改用户
- */
- private static void updateUser() {
- System.out.println("****修改用户updateUser****");
- User user = new User("006","Susan","33");
- Client client = ClientBuilder.newClient();
- WebTarget target = client.target(serverUri + "/users");
- Response response = target.request().buildPut( Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
- response.close();
- }
- /**
- * 根据id查询用户
- */
- private static void getUserById() {
- System.out.println("****根据id查询用户****");
- Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);// 注册json 支持
- WebTarget target = client.target(serverUri + "/users/006");
- Response response = target.request().get();
- User user = response.readEntity(User.class);
- System.out.println(user.getUserId() + user.getUserName() + user.getAge());
- response.close();
- }
- /**
- * 查询所有用户
- */
- private static void getAllUsers() {
- System.out.println("****查询所有getAllUsers****");
- Client client = ClientBuilder.newClient();
- WebTarget target = client.target(serverUri + "/users");
- Response response = target.request().get();
- <span style="white-space:pre"> </span> String value = response.readEntity(String.class);
- <span style="white-space:pre"> <span style="white-space:pre"> </span></span> System.out.println(value);
- <span style="white-space:pre"> </span> response.close(); //关闭连接
- }
- }
四、运行
启动服务端项目,运行客户端程序UserClient,控制台输出如下
- ****增加用户addUser****
- ****查询所有getAllUsers****
- [{"userId":"006","userName":"Susan","age":"21"}]
- ****修改用户updateUser****
- ****根据id查询用户****
- 006Susan33
- ****查询所有getAllUsers****
- [{"userId":"006","userName":"Susan","age":"33"}]
- ****删除用户****
- ****查询所有getAllUsers****
- []
五、总结
1.客户端如果需要进行JSON转换,需要进行JSON注册
- Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
2.WebTarget 指明了要请求的资源的地址
3.target.request(). 后面跟的是请求的方法:POST,GET,PUT或DELETE
*重点来了:现在可以用Firefox工具RESTClient
通过jersey-client客户端调用Jersey的Web服务模拟CURD的更多相关文章
- 使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
作者: Yi Ming Huang, 软件工程师, IBM Dong Fei Wu, 软件工程师, IBM Qing Guo, 软件工程师, IBM 出处: http://www.ibm.com/de ...
- 基于jersey和Apache Tomcat构建Restful Web服务(一)
基于jersey和Apache Tomcat构建Restful Web服务(一) 现如今,RESTful架构已然成为了最流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以得到越来 ...
- 基于jersey和Apache Tomcat构建Restful Web服务(二)
基于jersey和Apache Tomcat构建Restful Web服务(二) 上篇博客介绍了REST以及Jersey并使用其搭建了一个简单的“Hello World”,那么本次呢,再来点有趣的东西 ...
- C# 调用百度地图Web服务API
最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Di ...
- Node.js调用百度地图Web服务API的Geocoding接口进行点位反地理信息编码
(从我的新浪博客上搬来的,做了一些修改.) 最近迷上了node.js以及JavaScript.现在接到一个活,要解析一个出租车点位数据的地理信息.于是就想到使用Node.js调用百度地图API进行解析 ...
- C# 调用百度地图 Web 服务 API
最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Di ...
- java客户端调用c#的webservice服务
此处使用到了CXF框架,可以使用以下坐标从maven仓库中获取相关jar包: <dependency> <groupId>org.apache.cxf</groupId& ...
- 客户端调用cxf发布的服务
import java.util.ArrayList; import java.util.List; import javax.xml.namespace.QName; import org.apac ...
- Java与WCF交互(二):WCF客户端调用Java web service【转】
原文:http://www.cnblogs.com/downmoon/archive/2010/08/25/1807982.html 在上篇< Java与WCF交互(一):Java客户端调用WC ...
随机推荐
- 关闭PHPStorm 2017.1 中的新功能中的参数提示( Parameter hints )
参数提示( Parameter hints ) 参数提示是显示在方法的参数值前面的文字,帮助你更好的理解语义的具体方法.我们还增加了一个选项来定制你的内联参数提示,以符合你的IDE配色方案. 配置面板 ...
- mysql一些使用技巧
1.查看系统帮助文档:HELP contents; 2.查看所有支持的数据类型:HELP Data Types; 3.查看对应的数据类型的详细信息:HELP 类型:如HELP INT; 4.查看存储引 ...
- SPI FLASH与NOR FLASH的区别?
1.SPI Flash (即SPI Nor Flash)是Nor Flash的一种: 2.NOR Flash根据数据传输的位数可以分为并行(Parallel)NOR Flash和串行(SPI)NOR ...
- 你的变量究竟存储在什么地方 && 全局内存
我相信大家都有过这样的经历,在面试过程中,考官通常会给你一道题目,然后问你某个变量存储在什么地方,在内存中是如何存储的等等一系列问题.不仅仅是在面试中,学校里面的考试也会碰到同样的问题. 如果你还不 ...
- No bean named 'cxf' is defined
1.错误描述 严重:Exception starting filter CXFServlet org.springframework.beans.factory.NoSuchBeanD ...
- E: 未发现软件包 install_flash_player_11_linux.x86_64.tar.gz
1 错误描述 youhaidong@youhaidong:~$ sudo apt-get install install_flash_player_11_linux.x86_64.tar.gz 正在读 ...
- CentOS修改root密码
1.在系统启动时,按任意键中止启动 2.按E键修改系统启动文件 3.找到linux16开头的行,把整行ro后面内容删除,添加rd.break 4.Ctrl+X更改并重启 5.重新挂载/sysroot ...
- Django学习-8-模板渲染的一些特性
对于{%for i in list%}来说里面都有一个{{forloop.counter}}每次循环一次记一次数 对于{%for i in list%}来说里面都有一个{{forloop. ...
- java 堆 栈 常量池
java 堆中保存new 出来的对象(每个对象都包含一个与之对应的class的信息,[class信息存放在方法区]),堆中分配的内存,有虚拟机的自动垃圾回收器管理,栈内存只对其所属线程可见. java ...
- MySql获取所有表名
如何获取MySql中所有表的的表名? sql语句是:show tables 返回结果如下: 不仅仅返回了所有的表名,更返回了视图的名字.