2015-07-02 123 views
6

我有一個簡單的問題,我一直試圖找出在我的辦公室受限的互聯網連接,但無濟於事的答案。以xml或json作爲參數的寧靜web服務

1)如何在java中最好使用接受xml和/或json作爲參數的netbeans創建一個寧靜的web服務,以及如何處理它。

2)如何調用這些Web服務。我的意思是我們如何在URL中傳遞xml? 或者還有其他方法嗎?如果我不得不使用API​​,我寧願使用球衣。 如果問題太籠統,我很抱歉,但我需要在相對較短的時間內獲得的所有知識。

+1

如果有什麼任何建議提供鏈接,瞭解這個在你的辦公室被限制? ;) – Garry

+0

我期待那..但值得一試 – wib

+1

你的兩個問題都非常廣泛。它使你看起來像沒有零經驗。如果是這樣的話,我建議通過教程來運行。就個人而言,我只是從[用戶指南](https://jersey.java.net/documentation/latest/index.html)的頂部開始。第一章會讓你啓動並運行。第三章將更深入地介紹基礎知識。第九章將幫助您處理JSON和XML。另一種開始使用Netbeans的方式(真正快速,因此您可以跳過第1章)是查看[這個答案]的底部(http://stackoverflow.com/a/30546891/2587435) –

回答

1

您可以參考this鏈接。我希望這個鏈接可以從你的辦公室內訪問。

此外,接受參數的類型是您的要求的基礎。 有兩種註解用於接受和響應類型,分別是@consume(MediaType)@produce(MediaType)。您也將有指定的MediaType,像

MediaType.APPLICATION_JSON

MediaType.APPLICATION_XML_TYPE

2

這是如何做到的一般步驟這(我假設你已經安裝了java和相應的環境變量):

1)下載並安裝Apache Tomcat。配置Netbeans以標識已提取/安裝的Apache Tomcat實例。 2)下載jersey jar文件並將它們添加到您的Web項目from here(鏈接:Jersey JAX-RS 2.0 RI包),或者在使用maven時使用所需的依賴關係。不要忘記將項目添加到Apache Tomcat服務器。

3)在項目的源文件夾中創建一個基於Jersey的java類。 在每個寧靜的功能中,您將定義您將接受哪些數據,您將如何處理它們以及您將發送什麼。這裏是一個非常簡單的例子:

@Path("/server") 
public class RestServer { 

    @POST 
    @Consumes(MediaType.TEXT_XML) 
    @Produces(MediaType.TEXT_XML) 
    public String basicPOSTRequest_XMLResponse(String xmlString) {   
     System.out.println("Received: " + xmlString); 
     return doSomethingWithString(xmlString); 
    } 
} 

4)創建包含您寧靜的功能對應的Ajax調用WebContent文件夾中的「index.html的」文件。 (你在球衣類中創建的那些)。 在每個ajax調用中,您將使用jQuery功能發送和接收數據。下面是一個基本的Ajax調用例如:

function ajaxCall(xmlData) { 

$.ajax({ 
    type: "POST", 
    url: _baseURI + "/server", 
    contentType: "text/xml", 
    data: xmlData, 
    datatype: "text/xml", 
    success: 
      function (data, textStatus, jqXHR){ 
       alert(data); 
      }, 
    error: 
      function (jqXHR, textStatus, errorThrown) { 
       alert("error"); 
      } 
}); 
} 

注意,AJAX只是一個方式來使用你的寧靜功能。例如,您可以使用另一個可以發送Http調用的java(或任何其他語言)程序來執行此操作。

5)從eclipse啓動tomcat服務器。

6)使用你的index.html文件,通過點擊它的url(通常是'http://localhost:8080/-yourProjectName-')來檢查項目的寧靜功能。

以上僅爲準則。如果你想在任何步驟中獲得更多細節,請告訴我,以便編輯我的答案。

3

你可以這樣做。我目前正在研究這樣做的web服務。

使用這些批註:

@POST 
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 
public Object create(Object object); 

在要傳遞的對象,你可以從javax.xml.bind.annotation包的註釋。這樣,java可以編組/解組這些自身。

@XmlRootElement(name = "Something") 
@XmlAccessorType(XmlAccessType.NONE) 
public class A { 

    private static final long serialVersionUID = 6478918140990163091L; 

    @XmlElementWrapper(name = "collectionWrapper") 
    @XmlElement(name = "collectionItem") 
    private final Collection<Object> domainCollection = new LinkedList<Object>(); 
} 

要訪問做這樣的事情:

final Builder request = ClientBuilder.newClient().target(getBaseUri()).path("url").request(MediaType.APPLICATION_XML); 
return request.post(Entity.entity(param, MediaType.APPLICATION_XML)).readEntity(A.class); 

按照本教程的例子:http://www.vogella.com/tutorials/REST/article.html