请先看汇总篇「Web Service入门及实践」,学习前面的基础知识和例子再来看这篇!
使用Web Service时,最常用的操作就是CURD,这个例子就是通过xml或json格式的数据在客户端与服务端交互,实现对CURD操作的模拟,例子中的CURD操作都是在内存中进行的。
首先新建一个实体类User
具体代码跟demo2,demo3相同。
然后增加一个resource
代码如下:
package com.demo4.resources;
import com.demo4.bean.User;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 通过jersey客户端实现web service的CURD操作,
* 这里的模拟操作都是在内存中进行的
*/
@Path("/userClientResource")
public class UserClientResource {
private static Map<String, User> userMap = new HashMap<String, User>();//存储用户
/**
* 增加用户
* Consumes表示可以接受的client发送过来的MIME类型
*
* @param user
*/
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void createUser(User user) {
userMap.put(user.getUserId(), user);
}
/**
* 删除用户
*
* @param id
*/
@DELETE
@Path("{id}")
public void deleteUser(@PathParam("id") String id) {
userMap.remove(id);
}
/**
* 修改用户信息
*
* @param user
*/
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void updateUser(User user) {
userMap.put(user.getUserId(), user);
}
/**
* 根据id查询指定用户信息
* MediaType可以指定多个,如果客户端没有指定要返回的类型,则默认是前面那个
*
* @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;
}
/**
* 查询所有用户
* MediaType可以指定多个,如果客户端没有指定要返回的类型,则默认是前面那个
*
* @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;
}
}
然后是一个client
我们通过client向服务端发送请求,具体client端的代码如下:
package com.demo4.client;
import com.demo4.bean.User;
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;
public class UserClient {
private static String serverUri = "http://localhost:8080/jerseydemo/rest";
/**
* @param args
*/
public static void main(String[] args) {
addUser();
getAllUsers();
updateUser();
getUserById();
getAllUsers();
delUser();
getAllUsers();
}
/**
* 添加用户(以Json的格式向web service发送请求)
*/
private static void addUser() {
System.out.println("****增加用户addUser****");
User user = new User("006", "Susan", "21");
Client client = ClientBuilder.newClient();
WebTarget target = client.target(serverUri + "/userClientResource");
//指定请求的参数类型,target.request(). 后面跟的是请求的方法:POST,GET,PUT或DELETE
Response response = target.request().buildPost(Entity.entity(user, MediaType.APPLICATION_JSON)).invoke();
System.out.println("增加用户Susan...");
response.close();
}
/**
* 删除用户
*/
private static void delUser() {
System.out.println("****删除用户****");
Client client = ClientBuilder.newClient();
WebTarget target = client.target(serverUri + "/userClientResource/006");
//target.request(). 后面跟的是请求的方法:POST,GET,PUT或DELETE
Response response = target.request().delete();
System.out.println("删除ID为006的用户...");
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 + "/userClientResource");
//target.request(). 后面跟的是请求的方法:POST,GET,PUT或DELETE
Response response = target.request().buildPut(Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
System.out.println("修改Susan的年龄为33...");
response.close();
}
/**
* 根据id查询用户
*/
private static void getUserById() {
System.out.println("****根据id查询用户****");
Client client = ClientBuilder.newClient();
WebTarget target = client.target(serverUri + "/userClientResource/006");
//target.request(). 后面跟的是请求的方法:POST,GET,PUT或DELETE
Response response = target.request().get();
User user = response.readEntity(User.class);
System.out.println("用户ID:" + 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 + "/userClientResource");
// 使用默认的返回类型,target.request(). 后面跟的是请求的方法:POST,GET,PUT或DELETE
Response response = target.request().get();
//指定返回为json格式
//Response response = target.request(MediaType.APPLICATION_JSON).get();
String value = response.readEntity(String.class);
System.out.println(value);
response.close(); //关闭连接
}
}
运行client
执行结果如下:
****增加用户addUser****
增加用户Susan...
****查询所有getAllUsers****
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><users><user><age>21</age><userId>006</userId><userName>Susan</userName></user></users>
****修改用户updateUser****
修改Susan的年龄为33...
****根据id查询用户****
用户ID:006,用户姓名:Susan,用户年龄:33
****查询所有getAllUsers****
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><users><user><age>33</age><userId>006</userId><userName>Susan</userName></user></users>
****删除用户****
删除ID为006的用户...
****查询所有getAllUsers****
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><users></users>
源码
参考文章: