Java利用Jersey编写RESTful API

本文中demo是利用Jersey框架创建RESTful Web Service, Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发(Jersey百度百科)

1.借助Maven新建Java Web项目名称为restful-demo,pom中引入以下依赖包

    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.19.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.19.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.19.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-servlet</artifactId>
      <version>1.19.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-json -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-json</artifactId>
      <version>1.19.4</version>
    </dependency>

2.新建User实体类

package com.demo.restful.model;

/**
 * @Author: 
 * @Date: 2019/1/8 10:37
 */
public class User {

    private String name;

    private Integer age;

    public User() {
    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

3.编写restful接口

package com.demo.restful.service.impl;

import com.demo.restful.model.User;
import com.demo.restful.service.UserService;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * @Author: 
 * @Date: 2019/1/8 11:37
 */
//这里@Path指定提供服务的类级别的URI路径
@Path("user")
public class UserServiceImpl implements UserService {

    @Override
    /**
    * GET:读取(Read)
    * POST:新建(Create)
    * PUT:更新(Update)
    * PATCH:更新(Update),通常是部分更新
    * DELETE:删除(Delete)
    **/
    //这里@GET表示此方法只处理HTTP GET请求
    @GET
    //这里@Path指定提供服务的方法级别的URI路径
    //其中{name},{age}分别对应@PathParam("name")和@PathParam("age")
    @Path("getUser/{name}/{age}")
    //指定此方法返回的媒体类型,即返回值的形式
    @Produces(MediaType.APPLICATION_JSON)
    //@PathParam("name"),@PathParam("age")向@Path中定义的表达式注入参数值
    public String getUser(@PathParam("name") String name,@PathParam("age") Integer age) {
        return new User(name,age).toString();
    }
}

4.通过web.xml配置Jersey拦截器

5.启动项目,通过浏览器访问http://localhost:8080/rest/user/getUser/xiaoming/18

6.将此restful-demo保持运行状态,模拟服务端;新建restful-client项目(pom同restful-demo一致),模拟客户端,在客户端项目中创建测试类,模拟发送请求

package com.demo.restful;


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.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;

import javax.ws.rs.core.MediaType;

/**
 * @Author: 
 * @Date: 2019/1/8 14:22
 */
public class UserCient {

    public static void main(String[] args) {
        ClientConfig clientConfig = new DefaultClientConfig();
        Client client = Client.create(clientConfig);
        //等同于WebResource resource = 
        //client.resource("http://localhost:8080/rest/user/getUser/xiaoming/18");
        WebResource resource = 
        client.resource("http://localhost:8080/rest/user/getUser").path("/xiaoming/18");

        //设置以JSON形式返回
        WebResource.Builder accept = resource.accept(MediaType.APPLICATION_JSON_TYPE);

        //发送GET请求获取ClientResponse
        ClientResponse clientResponse = accept.get(ClientResponse.class);
        //输出此次请求的ClientResponse
        System.out.println(clientResponse);

        //发送GET请求获取调用接口的返回值
        String valueResponse = accept.get(String.class);
        //输出此次请求资源的返回值
        System.out.println(valueResponse);
    }
}

调用结果

7.我们也可以通过火狐的rest client直接访问


 RESTful(Representational State Transfer,即表现层状态转化)是目前最流行的 API 设计规范,用于 Web 数据接口的设计,它仅仅是一种软件 架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件

产生背景:近年来移动互联网的发展,前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......),因此,必须有一种统一的机制,方便 不同的前端设备与后端进行通信,于是 RESTful 诞生了,它可以通过一套统一的接口为 Web,iOS 和 Android 提供服务。

特点:基于“资源”,服务器上数据,服务都是资源,比如一个文件,一张图片都有对应的 url 地址,如果我们的客户端需要对服务器上的这个 资源进行操作,就需要通过 http 协议执行相应的动作(增删改查)来操作它,GET:查询,POST:新增,PUT:更新,DELETE:删除。 

猜你喜欢

转载自blog.csdn.net/Peacock__/article/details/86164002