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类

[java] view plaincopy

  1. package server;
  2. public class Person {
  3. private String name;
  4. private int age;
  5. public Person(String name, int age) {
  6. this.name = name;
  7. this.age = age;
  8. }
  9. public Person() {
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public void setAge(int age) {
  15. this.age = age;
  16. }
  17. public String getName() {
  18. return this.name;
  19. }
  20. public int getAge() {
  21. return this.age;
  22. }
  23. public String toString() {
  24. return "name=" + this.name + "|age=" + this.age;
  25. }
  26. }

第三步:创建MyResponse类

[java] view plaincopy

  1. package server;
  2. public class MyResponse {
  3. private String message;
  4. public MyResponse(String message) {
  5. this.message = message;
  6. }
  7. public MyResponse() {
  8. }
  9. public void setMessage(String message) {
  10. this.message = message;
  11. }
  12. public String getMessage() {
  13. return this.message;
  14. }
  15. public String toString() {
  16. return "message=" + this.message;
  17. }
  18. }

第四步:创建PersonResource类

[java] view plaincopy

  1. package server;
  2. import java.util.List;
  3. import javax.ws.rs.Consumes;
  4. import javax.ws.rs.DELETE;
  5. import javax.ws.rs.GET;
  6. import javax.ws.rs.POST;
  7. import javax.ws.rs.PUT;
  8. import javax.ws.rs.Path;
  9. import javax.ws.rs.PathParam;
  10. import javax.ws.rs.Produces;
  11. import javax.ws.rs.QueryParam;
  12. import org.json.JSONArray;
  13. import org.json.JSONException;
  14. import org.json.JSONObject;
  15. import com.google.gson.Gson;
  16. import com.google.gson.reflect.TypeToken;
  17. @Path("/person")
  18. public class PersonResource {
  19. @POST
  20. // 设置请求方式
  21. @Path("/post")
  22. // 设置请求路径
  23. @Consumes("application/json")
  24. // 设置接收数据格式
  25. @Produces("application/json")
  26. // 设置返回数据格式
  27. public MyResponse post(JSONObject request) {
  28. MyResponse response = new MyResponse("OK");
  29. // 获取persons数组
  30. JSONArray persons;
  31. String sex;
  32. try {
  33. persons = request.getJSONArray("persons");
  34. sex = request.getString("sex");
  35. } catch (JSONException e) {
  36. e.printStackTrace();
  37. response.setMessage("ERROR");
  38. return response;
  39. }
  40. // 获取各person信息
  41. int count = persons.length();
  42. Gson gson = new Gson();
  43. List<Person> ps = gson.fromJson(persons.toString(),
  44. new TypeToken<List<Person>>() {
  45. }.getType());
  46. for (int i = 0; i < count; i++) {
  47. Person p = ps.get(i);
  48. System.out.println(p);
  49. }
  50. System.out.println(sex);
  51. return response;
  52. }
  53. @PUT
  54. @Path("/put")
  55. @Consumes("application/json")
  56. @Produces("application/json")
  57. public MyResponse put(JSONObject request) {
  58. MyResponse response = new MyResponse("OK");
  59. Gson gson = new Gson();
  60. Person p = gson.fromJson(request.toString(), Person.class);
  61. System.out.println(p);
  62. return response;
  63. }
  64. @DELETE
  65. @Path("/delete")
  66. @Produces("application/json")
  67. // 从URL查询参数中获取参数
  68. public MyResponse delete(@QueryParam("name") List<String> name,
  69. @QueryParam("age") int age) {
  70. MyResponse response = new MyResponse("OK");
  71. System.out.println(name);
  72. System.out.println(age);
  73. return response;
  74. }
  75. @GET
  76. @Path("/{name}/get")
  77. @Produces("application/json")
  78. // 从URL路径中获取参数
  79. public MyResponse get(@PathParam("name") String name) {
  80. MyResponse response = new MyResponse("OK");
  81. System.out.println(name);
  82. return response;
  83. }
  84. }

第五步:创建PersonApplication类

[java] view plaincopy

  1. package app;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import javax.ws.rs.core.Application;
  5. import server.PersonResource;
  6. public class PersonApplication extends Application {
  7. @Override
  8. public Set<Class<?>> getClasses() {
  9. Set<Class<?>> rrcs = new HashSet<Class<?>>();
  10. // 绑定PersonResource。有多个资源可以在这里绑定。
  11. rrcs.add(PersonResource.class);
  12. return rrcs;
  13. }
  14. }

第六步:创建RestJaxRsApplication类

[java] view plaincopy

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

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

[html] view plaincopy

  1. <context-param>
  2. <param-name>org.restlet.application</param-name>
  3. <param-value>app.RestJaxRsApplication</param-value>
  4. </context-param>
  5. <servlet>
  6. <servlet-name>PersonServlet</servlet-name>
  7. <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
  8. </servlet>
  9. <servlet-mapping>
  10. <servlet-name>PersonServlet</servlet-name>
  11. <url-pattern>/*</url-pattern>
  12. </servlet-mapping>

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

[html] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <display-name>EXP</display-name>
  4. <context-param>
  5. <param-name>org.restlet.application</param-name>
  6. <param-value>app.RestJaxRsApplication</param-value>
  7. </context-param>
  8. <servlet>
  9. <servlet-name>PersonServlet</servlet-name>
  10. <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>PersonServlet</servlet-name>
  14. <url-pattern>/*</url-pattern>
  15. </servlet-mapping>
  16. </web-app>

第八步:编写客户端

[java] view plaincopy

  1. package test;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.json.JSONArray;
  6. import org.json.JSONException;
  7. import org.json.JSONObject;
  8. import org.junit.Test;
  9. import org.restlet.data.MediaType;
  10. import org.restlet.resource.ClientResource;
  11. import org.restlet.resource.ResourceException;
  12. import server.Person;
  13. import com.google.gson.Gson;
  14. public class Client {
  15. public static String url = "http://127.0.0.1:8080/EXP/person";
  16. @Test
  17. public void testPost() {
  18. ClientResource client = new ClientResource(url + "/post");
  19. try {
  20. Gson gson = new Gson();
  21. List<Person> ps = new ArrayList<Person>();
  22. for (int i = 0; i < 2; i++) {
  23. Person p = new Person();
  24. p.setName(String.valueOf(‘a‘ + i));
  25. p.setAge(i + 1);
  26. ps.add(p);
  27. }
  28. JSONArray persons = new JSONArray(gson.toJson(ps));
  29. JSONObject json = new JSONObject("{\"persons\":" + persons
  30. + ",\"sex\":male}");
  31. String result = client.post(json, MediaType.APPLICATION_JSON)
  32. .getText();
  33. System.out.println("This is POST...");
  34. System.out.println(result);
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. @Test
  40. public void testPut() {
  41. ClientResource client = new ClientResource(url + "/put");
  42. JSONObject json;
  43. try {
  44. json = new JSONObject("{\"name\":\"abc\",\"age\":123}");
  45. String result = client.put(json, MediaType.APPLICATION_JSON)
  46. .getText();
  47. System.out.println("This is PUT...");
  48. System.out.println(result);
  49. } catch (JSONException e) {
  50. e.printStackTrace();
  51. } catch (ResourceException e) {
  52. e.printStackTrace();
  53. } catch (IOException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. @Test
  58. public void testDelete() {
  59. ClientResource client = new ClientResource(url
  60. + "/delete?name=xyz,ijk&age=456");
  61. try {
  62. String result;
  63. result = client.delete().getText();
  64. System.out.println("This is DELETE...");
  65. System.out.println(result);
  66. } catch (ResourceException e) {
  67. e.printStackTrace();
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. @Test
  73. public void testGet() {
  74. ClientResource client = new ClientResource(url + "/ijk/get");
  75. try {
  76. System.out.println("This is GET...");
  77. System.out.println(client.get().getText());
  78. } catch (ResourceException e) {
  79. e.printStackTrace();
  80. } catch (IOException e) {
  81. e.printStackTrace();
  82. }
  83. }
  84. }

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

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

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

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

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

转载与http://blog.csdn.net/nani_z/article/details/12870887

时间: 2024-11-13 11:18:52

MyEclipse开发JAX-RS架构WebServices收发JSON数据格式的相关文章

[转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序

转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅<Struts 2系列教程>来比较Struts 1.x和Struts 2.x的相同点和不同点.    在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发.运行Struts程序,并给出了解决ActionForm出现乱码问题的方法.读者可以从本文中了解

Medium开发团队谈架构设计_转

转自:Medium开发团队谈架构设计 背景 说到底,Medium是个社交网络,人们可以在这里分享有意思的故事和想法.据统计,目前累积的用户阅读时间已经超过14亿分钟,合两千六百年. 我们支持着每个月两千五百万的读者以及每周数以万计的文章发布.我们不想Medium的文章以阅读量为成功的依据,而是观点取胜.在Medium,文章的观点比作者的名头更重要.在这里,对话促进想法,并且很看重文字的力量. 我是Medium开发团队的负责人,此前在Google工作,负责开发Google+和Gmail,还创立了C

设置MyEclipse开发项目时使用的JDK

安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置,设置步骤如下: Window→Preferences 弹出[Preferences]对话框,如下图所示: 点击[Add…]按钮,弹出[Add JRE]对话框,如下图所示 点击[Next>]按钮,进入下一个步骤,如下图所示: 选择要添加的JDK所在目录 点击[Finish]按钮后,就可以看到我们新添

MMORGP大型游戏设计与开发(客户端架构 part1 of vegine)

重写有些核心接口的时候,其实遇到了许多的问题,甚至一度的想过要放弃,但是最终还是坚持了下来.在客户端提供的这些接口中,可以清晰的看到客户端所依赖的各种模块的支持,以及各自之间的一些关联.下面只是介绍了vengine(微引擎)接口的基础模块框架,所谓的接口即对象设计中常见的Interface,为一个框架提供了清晰的规范支持. VEGINE FRAMEWORK 功能实现 该接口已全部实现,具体的实例只需要继承接口封装即可.上图只为简单的模块介绍,其实每个接口都有每个接口其特别的用处,这一点会在接下的

使用myeclipse开发Servlet

1.在myeclipse中创建一个web工程 2.在src目录下建立一个包并建立一个Servlet(myeclipse会自把Servlet映射到web.xml文件中) 3.发布工程,实际上就是把web工程拷贝到tomcat的webapp目录下. 4.启动tomcat,通过配置的url访问. 注意的问题: 1.一般开发人员会把doget和dopost方法合二为一. 2.是以流的形式输出到客户端的,所以我们在向浏览器输入东西的时候,我们要在输出流中写上东西将其输出. 3.我们将Servlet删除之后

李洪强iOS开发之 - 项目架构

李洪强iOS开发之 - 项目架构 01 - 在Appdelegate中设置跟控制器 //导入头文件

MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK

安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置,设置步骤如下: Window→Preferences 弹出[Preferences]对话框,如下图所示: 点击[Add…]按钮,弹出[Add JRE]对话框,如下图所示 点击[Next>]按钮,进入下一个步骤,如下图所示: 选择要添加的JDK所在目录 点击[Finish]按钮后,就可以看到我们新添

搭建Eclipse+MyEclipse开发环境

Eclipse+MyEclipse区别: 一个是开源免费的软件,一个是基由开源免费而开发的收费软件. MyEclipse是在Eclipse的基础上添加了更多插件... 我觉得MyEclipse比Eclipse更容易操作,使用方便.但它是收费的~-_ myEclipse是商业用途, 要注册的, 而且不开源, 因为版权问题, 所以一般的公司是不会用MYECLIPSE ECLIPSE是开源的, 也可以用于WEB开发, 比如装上WTP 插件, 就可以了 Eclipse:IBM 花了4千万美金来开发这个I

MMORGP大型游戏设计与开发(客户端架构)

首先为所有等待的朋友说一声歉意,实在让大家等的太久.客户端的设计本来就是一个大的工程,而且工作的关系,也没有太多时间在这方面做研究.不过在私下有空的时间,我还是继续着这方面的研究,很遗憾没有用期望的ogre+cegui最新的版本作为开发,这方面原因是新的版本资料实在不多,对于没有什么经验的人来说实在是一大难事,所以最终选择了同天龙八部/武侠世界版本接近的源码作为开发.好了,废话不多说,今天好介绍的是客户端的基本构架,天龙八部/武侠世界的设计模式. CLIENT 功能实现 本次功能实现了vengi