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
- 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类
[java] view plaincopy
- 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类
[java] view plaincopy
- 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类
[java] view plaincopy
- 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类
[java] view plaincopy
- 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,添加如下内容
[html] view plaincopy
- <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的完整代码如下,可供参考
[html] view plaincopy
- <?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>
第八步:编写客户端
[java] view plaincopy
- 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
MyEclipse开发JAX-RS架构WebServices收发JSON数据格式的更多相关文章
- 用MyEclipse开发REST Web Service
MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 使用MyEclipse开发RESTWeb服务来放大您的Web应用程序.在本教程示例中,您将创建一个简单 ...
- Medium开发团队谈架构设计_转
转自:Medium开发团队谈架构设计 背景 说到底,Medium是个社交网络,人们可以在这里分享有意思的故事和想法.据统计,目前累积的用户阅读时间已经超过14亿分钟,合两千六百年. 我们支持着每个月两 ...
- 深入浅出node.js游戏服务器开发1——基础架构与框架介绍
2013年04月19日 14:09:37 MJiao 阅读数:4614 深入浅出node.js游戏服务器开发1——基础架构与框架介绍 游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...
- 设置MyEclipse开发项目时使用的JDK
安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...
- Eclipse/Myeclipse 开发项目技巧
Eclipse/Myeclipse 开发项目 编程的本质: 把现实生活中的业务逻辑用代码实现. eclipse 是一个开放源代码.基于Java的可扩展开发平台. (最初主要用来Java语言开发,但目前 ...
- 转】MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/3927677.html 感谢! 安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyE ...
- Myeclipse开发内存溢出问题
MyEclipse开发内存溢出问题 window --> preferences --> MyEclipse --> servers --> Tomcat --> J ...
- MyEclipse使用总结——设置MyEclipse开发项目时使用的JDK
安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...
随机推荐
- bzoj2338 数矩形
给出N(N≤1500)个点,求选四个点作为顶点组成矩形的最大面积,保证有解. 对每两个点连边,按边长排序,枚举等长且中点相同的边作为对角线组成矩形,计算面积取最大值. 时间复杂度O(n2logn) # ...
- C#如何判断我的程序已经有一个实例正在运行
static class Program { private static Mutex mutex; /// <summary> /// 应用程序的主入口点. /// </summa ...
- C#全角和半角转换
在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角".在汉字输入时,系统提供&quo ...
- 5. redis管道, 发布订阅, 模拟队列
一. 发布订阅 #订阅scribe 127.0.0.1:6379> SUBSCRIBE "channel_1" Reading messages... (press Ctrl ...
- import了sun开头的类,虽然它在代码里压根就没派上用处!但是必须得引用!
package action; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io. ...
- HDU 2089 不要62(数位dp入门)
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715 数位数是从右向 ...
- NeHe OpenGL教程 第二十六课:反射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 安装Android SDK和ADT步骤和遇到的问题
http://894503895.diandian.com/post/2012-05-16/18695648 1.安装eclipse.下载地址:http://www.eclipse.org/downl ...
- 用block响应button的点击事件
1.继承UIButton : 2.在自己定义的button类中的方法 addTarget:(id)target action:(SEL)action forControlEvents:(UIContr ...
- NPM使用
安装路径修改: 4.配置npm的全局模块存放路径和cache路径 输入以下命令 npm config set prefix “D:\Program Files\node\node-global” n ...