一、總體說明
通過jersey-client接口,創建客戶端程序,來調用Jersey實現的RESTful服務,實現增、刪、改、查等操作。
服務端主要是通過內存的方式,來模擬用戶的增加、刪除、修改、查詢等操作。
二、創建服務端
1.在上文項目中,
在“com.waylau.rest.resources.UserResource“中修改代碼,
首先創建一個HashMap,用來保存添加的用戶
[java] view plaincopy
private static Map<String,User> userMap = new HashMap<String,User>();
2.創建增、刪、改、查 用戶資源等操作
[java] view plaincopy
/**
* 增加
* @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,代碼如下:
[java] view plaincopy
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,控制檯輸出如下
[html] view plaincopy
****增加用戶addUser****
****查詢所有getAllUsers****
[{"userId":"006","userName":"Susan","age":"21"}]
****修改用戶updateUser****
****根據id查詢用戶****
006Susan33
****查詢所有getAllUsers****
[{"userId":"006","userName":"Susan","age":"33"}]
****刪除用戶****
****查詢所有getAllUsers****
[]
五、總結
1.客戶端如果需要進行JSON轉換,需要進行JSON註冊
[java] view plaincopy
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
2.WebTarget 指明瞭要請求的資源的地址
3.target.request(). 後面跟的是請求的方法:POST,GET,PUT或DELETE