2015-06-04 56 views
0

我創建了一個jax-rs rest api並用rest-assured進行了測試。所有測試都是綠色的。現在我正在嘗試爲它創建一個html/js前端。如何查看來自restassured發送的實際主體

我的問題是我不知道我的json對象應該如何被我的rest API接受。感謝Restassured/jax-rs我從來沒有處理過請求字符串。我填寫對象並獲取對象,(un)marshaling(json)是不可見的。

有什麼辦法可以看到(調試)什麼字符串是由rest-assured/java創建並通過「wire」發送的?

回答

1

我不是一個RestAssured使用,所以我不能直接回答你的問題,但這裏有一些想法可以幫助你。

  • 我不知道什麼序列化器RestAssured在引擎蓋下使用,但在Wildfly Resteasy默認使用傑克遜。我會熟悉這個圖書館。對於較不重要的應用程序,您可能需要直接挖掘其API以獲得您想要的結果。這是documentation。對於您的特定情況下,你可以做

    ObjectMapper mapper = new ObjectMapper(); 
    String jsonString = mapper.writeValueAsString(yourObject); 
    System.out.println(jsonString); 
    

    簡單的東西這將打印出JSON格式的POJO,基於類的干將。這是最基本的層面。如果您還沒有傑克遜作爲依賴,你可以添加

    <dependency> 
        <groupId>com.fasterxml.jackson.core</groupId> 
        <artifactId>jackson-databind</artifactId> 
        <version>2.4.0</version> 
    </dependency> 
    
  • 一個很好的朋友(工具)已經是cURL。它是一個命令行工具,允許您製作REST/HTTP(其他協議)請求。儘管對於這種特殊情況它不會有幫助,但您可以向您的資源發送GET請求,該資源的服務類型與您在POST中接受的類型相同。這樣,你可以看到生成的JSON。這點可能有點多,但如果你要做大量的REST開發,我肯定會研究這個工具。

  • 你也可能想看看像[郵差爲Chrome]

  • 一個瀏覽器工具,你真的應該熟悉JSON format。一旦熟悉它,並開始使用JSON框架,您會注意到,在基本級別上,它們都以類似的方式工作。

    Java Object == JSON Object ({}) 
    Java Collection/Array == JSON Array ([]) 
    Java fields/properties == JSON keys 
    
    Getters are used for they keys and their values (for serialization) 
    Setters are used for deserialization 
    

    因此,例如,你有這個類

    public class Person { 
        String name; 
        List<Person> friends; 
    
        public String getName() { return name; } 
        public void setName(String name) { return name; } 
        // Getter and Setter for friends 
    } 
    

    Person實例將產生以下JSON

    { 
        "name" : "Peeskillet", 
        "friends": [ 
         { 
          "name": "Lebron James" 
         }, 
         { 
          "name": "Steph Curry" 
         } 
        ] 
    } 
    

這其實很簡單,一旦你找到竅門它。

  • 哦,另一件你可以做的事情是在服務器端添加一個日誌過濾器as mentioned here

至於使用Javascript,有一個JSON.stringify(javascriptObject)將您的Javacript對象序列化爲JSON字符串。所以一般來說,你可以像Java對象一樣建模你的Javascript對象。

希望這有助於。

+0

感謝您的深入回答!第一部分幫助最多(我已經添加了傑克遜依賴測試) - 所以我用你的代碼示例來轉換的東西。 – dermoritz

0

在RestAssured只是用這樣的:如果你想登錄請求主體

String body = resp.asString(); System.out.println(body);

2

,你可以這樣做:

given().log().body(). .. 

或者,如果你想記錄響應身體,你可以做:

.. .then().log().body(). .. 

更多德見documentation on logging尾巴。

相關問題