您的位置:首页 > 编程语言 > Java开发

一个包含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文件的作用及基本配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐