一個包含Jersey庫的簡單Web Service以及一個發送Json資料的Java用戶端

來源:互聯網
上載者:User
一個包含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檔案的作用及基本配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.