利用Jersey构建REST之入门实例

一、依赖包

  1、目录结构如下:

  

2.对了,还需要引入junit.jar

二、服务端代码

package com.haha.manager;

import java.util.concurrent.atomic.AtomicLong;

public class User {

    private static AtomicLong seq = new AtomicLong(0);

    private Long id;

    private String name;

    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    User(){
    }

    public User(String name, String sex) {
        this.id = seq.incrementAndGet();
        this.name = name;
        this.sex = sex;
    }

    public Long getId() {
        return id;
    }

    public void setId() {
        this.id = seq.incrementAndGet();
    }

}
package com.haha.jersey;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.haha.manager.User;
import com.jery.util.JsonMapper;

@Path("user")
public class UserResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("world")
    public String say(){
        return "helloWorld!";
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("hook")
    public String hook(){
        return "hook!";
    }

    private static Map<Long,User> userMap=new HashMap<Long,User>();    

    @POST
    @Path("add")
    @Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public void creatUser(@FormParam("name") String name,
            @FormParam("sex") String sex){
        try {

            User user=new User(name,sex);
            userMap.put(user.getId(), user);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

    @DELETE
    @Path("{id}")
    public void deleteUser(@PathParam("id")Long id){
        userMap.remove(id);
    }

    @PUT
    @Path("update")
    @Consumes({MediaType.APPLICATION_FORM_URLENCODED,MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public void updateUser(@FormParam("id") String id,
            @FormParam("name") String name){
        User user=userMap.get(Long.valueOf(id));
        user.setName(name);
        userMap.put(Long.valueOf(id), user);
    }

    @GET
    @Path("{id}")
    @Produces({MediaType.APPLICATION_XML,MediaType.TEXT_PLAIN,MediaType.APPLICATION_JSON})
    public String findUserById(@PathParam("id") Long id){
        User user=userMap.get(id);
        String str="";
        try {
            str=JsonMapper.buildNormal().toJson(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }

    @GET
    @Produces({MediaType.APPLICATION_XML,MediaType.TEXT_PLAIN,MediaType.APPLICATION_JSON})
    public String getUsers(){
        List<User> userList=new ArrayList<User>();
        userList.addAll(userMap.values());
        String str="";
        try {
            str=JsonMapper.buildNormal().toJson(userList);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }

}

三、客户端代码

package com.haha.client;

import javax.swing.text.html.parser.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;

import org.junit.Test;

import com.jery.util.JsonMapper;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.core.util.MultivaluedMapImpl;

public class UserClient {
    private static String uri="http://127.0.0.1:8080/haha/rest";

    @Test
    public void addUser(){
        try {
            MultivaluedMap form=new MultivaluedMapImpl();
            form.add("name", "鲁智深");
            form.add("sex", "male");
            System.out.println(JsonMapper.buildNormal().toJson(form));
            WebResource resource=new Client().resource(uri+"/user/add");
            ClientResponse response = resource.type(MediaType.APPLICATION_FORM_URLENCODED).
                    post(ClientResponse.class, form);
            System.out.println(response.getStatus());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void delete(){
        try {
            WebResource resource=new Client().resource(uri).path("user/1");
            ClientResponse response=resource
                    .delete(ClientResponse.class);
            System.out.println(response.getStatus());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void update(){
        try {
            MultivaluedMap form=new MultivaluedMapImpl();
            form.add("id","2");
            form.add("name", "戴(●‘?‘●)鑫");
            form.add("sex", "male");
            System.out.println(JsonMapper.buildNormal().toJson(form));
            WebResource resource=new Client().resource(uri+"/user/update");
            ClientResponse response = resource.type(MediaType.APPLICATION_FORM_URLENCODED)
                    .put(ClientResponse.class,form);
            System.out.println(response.getStatus());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void findUser(){
        WebResource resource=new Client().resource(uri).path("user/1");
        ClientResponse response=resource.accept(MediaType.TEXT_PLAIN)
                .get(ClientResponse.class);
        System.out.println(response.getStatus());
        System.out.println(response.getEntity(String.class));
    }

    @Test
    public void getUsers(){
        WebResource resource=new Client().resource(uri).path("user");
        ClientResponse response=resource.accept(MediaType.TEXT_PLAIN)
                .get(ClientResponse.class);
        System.out.println(response.getStatus());
        System.out.println(response.getEntity(String.class));
    }

}
时间: 2024-10-10 15:25:04

利用Jersey构建REST之入门实例的相关文章

java利用构建器来创建实例而不是构造器

java利用构建器来创建实例而不是构造器 1.对于类而言,为了让客户端获取他本身的一个实例, 2.最传统的方法就是提供一个公有的构造器. 一个类中 重载多个构造器 客户面对多个构造器这种API永远也记不住该用哪个构造器, 并且每次调用构造器必然会创建新的对象, 如果程序需要重复使用对象,构造器无法避免创建不必要的对象. 静态工厂方法与构造器不同的 第一大优势为:他们有名称 第二大优势为:不必每一次调用他们的时候创建一个新对象 第三大优势为:他们可以返回原返回类型的任何子类型的对象 第四大优势为:

OSGI入门实例讲解(一)

开放服务网关倡议(OSGi)定义了开发和部署模块应用程序和库的体系结构.作为介绍OSGi的第一篇文章,本文旨在让你了解OSGi开发的一些概念,并向你展示了如何使用Eclipse的OSGi容器(Equinox)实现建立一个简单的Hello World应用.此外还简要介绍了使用OSGi构建面向服务的应用程序以及OSGi的servicefactory和servicetracker类. OSGI(Open Services Gateway Initiative),也叫JAVA动态模块系统,定义了一套模块

SoapUI简介和入门实例解析

SoapUI简介 SoapUI是一个开源测试工具,通过soap/http来检查.调用.实现Web Service的功能/负载/符合性测试.该工具既可作为一个单独的测试软件使用,也可利用插件集成到Eclipse,maven2.X,Netbeans 和intellij中使用. SoapUI是一个自由和开放源码的跨平台功能测试解决方案.通过一个易于使用的图形界面和企业级功能,SoapUI让您轻松, 快速创建和执行自动化功能.回归.合规和负载测试.在一个测试环境,SoapUI提供完整的测试覆盖,并支持所

DWR之入门实例(一)

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-

[Gradle] 在 Eclipse 下利用 gradle 构建系统

转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 构建系统时候常常要用到 Ant, Maven 等工具,对于初学者来说,它们还是过于复杂,上手还是需要时间的.本文将向读者介绍一种全新的构建项目的方式 gradle,它简单.上手快,能大大节省项目的时间和成本. 在 eclipse 下利用 gradle 构建系统 基本开发环境 操作系统:本教程使用的为 Windows Vista Enterprise, 如果您的系统是

利用Jersey搭建Rest的Web服务

传统模式下,一般利用servlet+jsp来完成前后台的交互,但是现在随着技术的进步,利用rest总线作为数据访问一种方式成为一种流行.本片博文主要利用Jersey搭建rest服务,并且利用mybatis作为数据库访问方式构建一个从前台到后台交互并且实现数据持久化的一个完整架构. 1,首先构建一个maven web项目,项目结构如下: 其中pom.xml文件中的dependency如下: <dependencies> <!--jersey --> <dependency>

Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附详细代码] 标签: SparkECLIPSEJAVAMAVENwindows 2016-06-18 22:35 405人阅读 评论(0) 收藏 举报  分类: spark(5)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言 本文旨在记录初学Spark时,根据官网快速

三层架构入门实例

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想. 首先我们先用一组生活中的图片来说明三层的重要性.(摘自网络) 生活中的实例  饭店有三个分工,服务员,厨师和采购员 分三层,松耦合,更方便应对变化. 实际这种思想也适用于我们的三层架构. UI只负责显示和采集用户操作,不包含任何的业务相关的逻辑处理. BLL 负责处理业务逻辑,通过U

mybatis 详解(二)------入门实例(基于XML)

通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一个入门实例来对mybatis有更近一步的了解. 我们用 mybatis 来对 user 表进行增删改查操作. ps:本篇博客源代码链接:http://pan.baidu.com/s/1eSEfc8i密码:j480 1.创建MySQL数据库:mybatisDemo和表:user 这里我们就不写脚本创建