MyEclipse开发JAX-RS架构WebServices收发JSON数据格式

最近因项目需求,开始学习WebServices。

1、开发环境:

MyEclipse2013

2、客户端发送的JSON数据格式为

{persons:[{"name":"a","age":1},{"name":"b","age":2}],"sex":"male"}(POST请求方式使用)

{"name":"abc","age":123}(PUT请求方式使用)

3、服务端返回的JSON数据格式为

{"message":"OK"}

4、客户端请求方式包括

POST、PUT、DELETE、GET

5、服务端参数来自HTTP请求的位置包括

URL路径、URL查询参数

第一步:建立WebServices工程,如图

 

 

直接Finish就好,也可以自己Next一下看看有哪些设置。

 

第二步:添加额外Jar包,包括

org.json

gson

org.restlet.ext.jaxrs

org.restlet.ext.json

org.restlet.ext.servlet

org.restlet

第二步:创建Person类

package server;
 
public class Person {
    private String name;
    private int age;
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public Person() {
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getName() {
        return this.name;
    }
 
    public int getAge() {
        return this.age;
    }
 
    public String toString() {
        return "name=" + this.name + "|age=" + this.age;
    }
}

 

第三步:创建MyResponse类

package server;
 
public class MyResponse {
    private String message;
 
    public MyResponse(String message) {
        this.message = message;
    }
 
    public MyResponse() {
    }
 
    public void setMessage(String message) {
        this.message = message;
    }
 
    public String getMessage() {
        return this.message;
    }
 
    public String toString() {
        return "message=" + this.message;
    }
}

 


第四步:创建PersonResource类

package server;
 
import java.util.List;
 
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
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.QueryParam;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
 
@Path("/person")
public class PersonResource {
    @POST
    // 设置请求方式
    @Path("/post")
    // 设置请求路径
    @Consumes("application/json")
    // 设置接收数据格式
    @Produces("application/json")
    // 设置返回数据格式
    public MyResponse post(JSONObject request) {
        MyResponse response = new MyResponse("OK");
 
        // 获取persons数组
        JSONArray persons;
        String sex;
        try {
            persons = request.getJSONArray("persons");
            sex = request.getString("sex");
        } catch (JSONException e) {
            e.printStackTrace();
 
            response.setMessage("ERROR");
            return response;
        }
 
        // 获取各person信息
        int count = persons.length();
        Gson gson = new Gson();
        List<Person> ps = gson.fromJson(persons.toString(),
                new TypeToken<List<Person>>() {
                }.getType());
        for (int i = 0; i < count; i++) {
            Person p = ps.get(i);
            System.out.println(p);
        }
        System.out.println(sex);
        return response;
    }
 
    @PUT
    @Path("/put")
    @Consumes("application/json")
    @Produces("application/json")
    public MyResponse put(JSONObject request) {
        MyResponse response = new MyResponse("OK");
        Gson gson = new Gson();
        Person p = gson.fromJson(request.toString(), Person.class);
        System.out.println(p);
        return response;
    }
 
    @DELETE
    @Path("/delete")
    @Produces("application/json")
    // 从URL查询参数中获取参数
    public MyResponse delete(@QueryParam("name") List<String> name,
            @QueryParam("age") int age) {
        MyResponse response = new MyResponse("OK");
        System.out.println(name);
        System.out.println(age);
        return response;
    }
 
    @GET
    @Path("/{name}/get")
    @Produces("application/json")
    // 从URL路径中获取参数
    public MyResponse get(@PathParam("name") String name) {
        MyResponse response = new MyResponse("OK");
        System.out.println(name);
        return response;
    }
}

 

 

第五步:创建PersonApplication类

package app;
 
import java.util.HashSet;
import java.util.Set;
 
import javax.ws.rs.core.Application;
 
import server.PersonResource;
 
public class PersonApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> rrcs = new HashSet<Class<?>>();
        // 绑定PersonResource。有多个资源可以在这里绑定。
        rrcs.add(PersonResource.class);
        return rrcs;
    }
}

 

 

第六步:创建RestJaxRsApplication类

package app;
 
import org.restlet.Context;
import org.restlet.ext.jaxrs.JaxRsApplication;
 
public class RestJaxRsApplication extends JaxRsApplication {
    public RestJaxRsApplication(Context context) {
        super(context);
        // 将PersonApplication加入了运行环境中,如果有多个Application可以在此绑定
        this.add(new PersonApplication());
    }
}

 

 

第七步:修改web.xml,添加如下内容

<context-param>
    <param-name>org.restlet.application</param-name>
    <param-value>app.RestJaxRsApplication</param-value>
  </context-param>
  <servlet>
    <servlet-name>PersonServlet</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>PersonServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

 

本示例工程的web.xml的完整代码如下,可供参考

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>EXP</display-name>
  <context-param>
    <param-name>org.restlet.application</param-name>
    <param-value>app.RestJaxRsApplication</param-value>
  </context-param>
  <servlet>
    <servlet-name>PersonServlet</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>PersonServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

 

 

第八步:编写客户端

package test;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
import org.restlet.data.MediaType;
import org.restlet.resource.ClientResource;
import org.restlet.resource.ResourceException;
 
import server.Person;
 
import com.google.gson.Gson;
 
public class Client {
    public static String url = "http://127.0.0.1:8080/EXP/person";
 
    @Test
    public void testPost() {
        ClientResource client = new ClientResource(url + "/post");
        try {
            Gson gson = new Gson();
            List<Person> ps = new ArrayList<Person>();
            for (int i = 0; i < 2; i++) {
                Person p = new Person();
                p.setName(String.valueOf('a' + i));
                p.setAge(i + 1);
                ps.add(p);
            }
            JSONArray persons = new JSONArray(gson.toJson(ps));
            JSONObject json = new JSONObject("{\"persons\":" + persons
                    + ",\"sex\":male}");
            String result = client.post(json, MediaType.APPLICATION_JSON)
                    .getText();
            System.out.println("This is POST...");
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    @Test
    public void testPut() {
        ClientResource client = new ClientResource(url + "/put");
        JSONObject json;
        try {
            json = new JSONObject("{\"name\":\"abc\",\"age\":123}");
            String result = client.put(json, MediaType.APPLICATION_JSON)
                    .getText();
            System.out.println("This is PUT...");
            System.out.println(result);
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (ResourceException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    @Test
    public void testDelete() {
        ClientResource client = new ClientResource(url
                + "/delete?name=xyz,ijk&age=456");
        try {
            String result;
            result = client.delete().getText();
            System.out.println("This is DELETE...");
            System.out.println(result);
        } catch (ResourceException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    @Test
    public void testGet() {
        ClientResource client = new ClientResource(url + "/ijk/get");
        try {
            System.out.println("This is GET...");
            System.out.println(client.get().getText());
        } catch (ResourceException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

第九步:启动Tomcat,发布服务

若无报错(启动和发布都没报错)则说明服务发布成功。

 

第十步:运行客户端,查看演示效果

可在客户端与服务端的控制台查看输出。

至此,整个示例工程结束。其中包含了主要的请求方法和参数获得方法,传输的数据格式也采用流行的JSON格式(也可以使用XML,各位可自行查找相关资料)。

 

 我很喜欢的一篇博客:转载于 http://blog.csdn.net/nani_z/article/details/12870887

转载于:https://www.cnblogs.com/chenyq/p/4353828.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值