一个包含Jersey库的简单Web Service以及一个发送Json数据的Java客户端
2015-03-27 17:53
549 查看
一个包含Jersey库的简单Web Service以及一个发送Json数据的Java客户端
一个包含Jersey库的简单Web Service以及一个发送Json数据的Java客户端Preface
环境工具
建立Dynamic Web Project
创建你的RestService类
创建java project做为json client
Other Resource
Preface
想写这篇tutorial的理由很简单,之前学web service的时候发现很多资料上的实例基本上都是凑起来的,也就是说看上去功能结构很完整,复制粘贴的也很爽,但是一些细节上的配置之类的可能会有错误,当时因此耽误了很长时间本sample基本是crunchify的翻译版,不过里面对于web.xml的配置有些不同,crunchify的那个貌似是错的(至少我当时没能用他的跑通)
本文原创,允许转载但务必贴出本文链接
环境&工具
Jersey JAX-RS 2.0 RI bundle 解压后将所有.jar文件放在WebContent>WEB-INF>lib下面json.jar
java version “1.8.0_40”
tomcat 8.0
eclipse Luna
建立Dynamic Web Project
name = “simpleRestWebService”创建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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>simpleRestWebService</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>simpleRestWebService</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> </web-app>
本sample web.xml的作用主要是将WEBROOT/api/下的所有请求,映射到simpleRestWebService.RestService类中
创建你的RestService类
内容如下:package simpleRestWebService; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import javax.ws.rs.GET; import javax.ws.rs.Produces; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Path("/restService") public class RestService { @POST @Consumes(MediaType.APPLICATION_JSON) public Response json_restResponse(InputStream incomingData) { StringBuilder jsonRest = new StringBuilder(); try { BufferedReader in = new BufferedReader(new InputStreamReader(incomingData)); String line = null; while ((line = in.readLine()) != null) { jsonRest.append(line); } } catch (Exception e) { System.out.println("Error Parsing: - "); } System.out.println("Data Received: " + jsonRest.toString()); // return HTTP response 200 in case of success return Response.status(200).entity(jsonRest.toString()).build(); } @GET @Produces(MediaType.TEXT_PLAIN) public String sayPlainTextHello() { return "Hello simpleRestWebService"; } // This method is called if XML is request @GET @Produces(MediaType.TEXT_XML) public String sayXMLHello() { return "<?xml version=\"1.0\"?>" + "<hello> Hello simpleRestWebService" + "</hello>"; } // This method is called if HTML is request @GET @Produces(MediaType.TEXT_HTML) public String sayHtmlHello() { return "<html> " + "<title>" + "Hello simpleRestWebService" + "</title>" + "<body><h1>" + "Hello simpleRestWebService" + "</body></h1>" + "</html> "; } }
这里面包含了两种HTTP请求,GET和POST,其中我用GET做直观的测试,做完之后可以戳http://localhost:8080/simpleRestWebService/api/restService查看结果。另外一个是POST,我们之后用这个来接受含有json文件的请求。
创建java project做为json client
首先写一个小的json文件作为输入,如:{ "tristan":{ "name": "tristan", "age": 21, "university": "UESTC", "hobby": ["jog", "ride"] } }
可以去站长工具那里检测一下是不是符合json格式
client class name = “RestClient”
client内容如下:
package restSerivceClient; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import org.json.JSONObject; public class RestClient { public static void main(String[] args) { String string = ""; try { // Step1: Let's 1st read file from fileSystem InputStream clientInputStream = new FileInputStream( "/home/tristan/workspace/Source/IOFiles/sampleJson.js"); InputStreamReader clientReader = new InputStreamReader(clientInputStream); BufferedReader br = new BufferedReader(clientReader); String line; while ((line = br.readLine()) != null) { string += line + "\n"; } JSONObject jsonObject = new JSONObject(string); System.out.println(jsonObject); // Step2: Now pass JSON File Data to REST Service try { URL url = new URL("http://localhost:8080/simpleRestWebService/api/restService"); URLConnection connection = url.openConnection(); connection.setDoOutput(true); connection.setRequestProperty("Content-Type", "application/json"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); out.write(jsonObject.toString()); out.close(); System.out.println("ok~before"); InputStreamReader inReader = new InputStreamReader(connection.getInputStream()); System.out.println("ok~reader"); BufferedReader in = new BufferedReader(inReader); System.out.println("ok~buffer"); while (in.readLine() != null) { } System.out.println("\nREST Service Invoked Successfully.."); in.close(); } catch (Exception e) { System.out.println("\nError while calling REST Service"); System.out.println(e); } br.close(); } catch (Exception e) { e.printStackTrace(); } } }
如果不能连接到server的话,console中只会有“ok~before”以及一个Exception提示
Other Resource
可以做web.xml的配置字典 web.xml文件的作用及基本配置相关文章推荐
- 【转载】Java数据接口编写简单例子,Java Json解析,服务端接口输出Json数据,客户端通过HTTP获取接口Json数据,作者:Jaiky_杰哥
- java生成json格式数据,一个简单的class
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- 关于JSON数据的入门了解以及在java中简单的读写json文件
- iOS客户端发送json数据,java(servlet)服务器接受json数据
- 一个简单地应用--从客户端向服务器发送数据.post,get.httpclientget,httpclinetpost,文件上传.
- 一个简单的socket服务端和客户端程序:客户端发送数据给服务端,服务端接收到数据后再给客户端发送数据
- Java数据接口编写简单例子,Java Json解析,服务端接口输出Json数据,客户端通过HTTP获取接口Json数据
- Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
- 一个简单的Android客户端从服务器端获取json数据并解析的实现代码
- 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中
- QT中用udp客户端发送消息,丢失数据的情况以及处理!
- java方式的将java对象以及list或者map转化为json数据
- java客户端与服务器连接并发送数据
- Json树形结构数据转Java对象并存储到数据库的实现-超简单的JSON复杂数据处理
- 用Java实现一个简单的服务器与客户端程序
- 用java实现一个简单的web客户端
- 一个java处理JSON格式数据的通用类
- 利用Json向客户端发送数据