zoukankan      html  css  js  c++  java
  • 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

    爱生活,更爱给我带来生活的人
  • 相关阅读:
    java实现简单web服务器(分析+源代码)
    Java中常见的5种WEB服务器介绍
    Android ViewDragHelper完全解析 自定义ViewGroup神器
    设置SVN,Git忽略MAC的.DS_Store文件的方法
    Android中图片大小和屏幕密度的关系讲解
    Android组件化方案及组件消息总线modular-event实战
    机器学习在美团配送系统的实践:用技术还原真实世界
    智能支付稳定性测试实战
    数据库智能运维探索与实践
    【人物志】技术十年:美团第一位前端工程师潘魏增
  • 原文地址:https://www.cnblogs.com/chenyq/p/4353828.html
Copyright © 2011-2022 走看看