用Jersey构建RESTful服务4--通过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();  
             String value = response.readEntity(String.class);  
             System.out.println(value);  
             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

本章源码:https://github.com/waylau/RestDemo/tree/master/jersey-demo4-client-curd

目录
相关文章
|
15天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
15天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
XML 开发框架 JSON
flea-jersey使用之Flea RESTful接口客户端接入
本篇介绍 Flea框架下的 flea-jersey-client模块,并提供客户端依赖管理及接入步骤
25 1
flea-jersey使用之Flea RESTful接口客户端接入
|
9天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
13天前
|
JavaScript 前端开发 API
Vue.js:构建高效且灵活的Web应用的利器
Vue.js:构建高效且灵活的Web应用的利器
|
20天前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox与Grid布局的深度对比
【4月更文挑战第4天】 在现代前端开发中,构建灵活且响应式的用户界面是至关重要的。随着移动设备浏览量的增加,能够适应不同屏幕尺寸和分辨率的布局技术变得必不可少。Flexbox和Grid是CSS提供的两种强大的布局机制,它们各自以独特的方式解决了响应式设计的挑战。本文将深入探讨Flexbox和Grid的核心概念、使用场景和性能考量,为开发者提供在面对不同布局需求时做出明智选择的依据。
|
21天前
|
前端开发 Java API
构建RESTful API:Java中的RESTful服务开发
【4月更文挑战第3天】本文介绍了在Java环境中构建RESTful API的重要性及方法。遵循REST原则,利用HTTP方法处理资源,实现CRUD操作。在Java中,常用框架如Spring MVC简化了RESTful服务开发,包括定义资源、设计表示层、实现CRUD、考虑安全性、文档和测试。通过Spring MVC示例展示了创建RESTful服务的步骤,强调了其在现代Web服务开发中的关键角色,有助于提升互操作性和用户体验。
构建RESTful API:Java中的RESTful服务开发
|
27天前
|
安全 API 开发者
构建高效可扩展的RESTful API服务
在数字化转型的浪潮中,构建一个高效、可扩展且易于维护的后端API服务是企业竞争力的关键。本文将深入探讨如何利用现代后端技术栈实现RESTful API服务的优化,包括代码结构设计、性能调优、安全性强化以及微服务架构的应用。我们将通过实践案例分析,揭示后端开发的最佳实践,帮助开发者提升系统的响应速度和处理能力,同时确保服务的高可用性和安全。
27 3
|
1月前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox的力量
【2月更文挑战第28天】 在现代网页设计中,创建能在不同设备上保持一致性和功能性的响应式界面是至关重要的。Flexbox,一个CSS布局模块,为前端开发者提供了强大工具来轻松实现灵活的布局设计。本文将深入探讨Flexbox的核心概念、使用场景以及如何通过它来优化响应式设计流程。
|
1月前
|
JSON API 数据库
解释如何在 Python 中实现 Web 服务(RESTful API)。
解释如何在 Python 中实现 Web 服务(RESTful API)。
26 0