一、總體說明
通過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