2012-05-22 33 views
2

我正在使用resteasy做一個rest api,並用rest-assured進行測試。將對象序列化爲json放心的請求體

比方說,我有一個班級message,屬性爲text

@XmlRootElement 
public class message { 
    @XmlElement 
    public String text; 
} 

下面的測試將嘗試這個對象發佈到指定網址:

message msg = new message(); 
msg.text = "some message"; 

expect() 
    .statusCode(200) 
.given() 
    .contentType("application/json") 
    .body(msg) 
.when() 
    .post("/message"); 

味精對象序列化到JSON和發佈,而不是在路上,我想 - 不是在就是這樣。

什麼貼:

{ "text": "some message" } 

什麼工作:

{ "message": { "text": "some message" } } 

有沒有人對我怎樣才能使這項工作預計任何線索?

+0

我有兩個問題給你: 你是怎麼知道發佈了什麼的?並且 您是如何將您標記爲解答的解決方案應用的? 謝謝 –

+0

對不起,但我不再有可用的代碼給我。但是如果我記得沒錯的話,那就歸結到你提供的軟件包。在我們的例子中,我們使用了maven。找到發佈的內容不應該那麼困難。使用代理或日誌或其他。 – Vegar

回答

4

您可能正在使用帶有RestEasy的內置Jettison JSON序列化程序。 Jettison使用XML-> Json約定(也稱爲BadgerFish)。用傑克遜或GSon替換Jettison以獲得與RestAssured兼容的JSon格式。

5

我知道這已經有一個答案,但我想分享我能夠發送json對象的方式。有人可能會發現它有幫助

// import org.json.simple.JSONObject; 
JSONObject person = new JSONObject(); 
person.put("firstname", "Jonathan"); 
person.put("lastname", "Morales"); 

JSONObject address = new JSONObject(); 
address.put("City", "Bogotá"); 
address.put("Street", "Some street"); 
person.put("address", address); 

String jsonString = person.toJSONString(); 
// {"address":{"Street":"Some street","City":"Bogotá"},"lastname":"Morales","firstname":"Jonathan"} 

// import static com.jayway.restassured.RestAssured.*; 
given().contentType("application/json") 
     .body(jsonString) 
     .expect().statusCode(200) 
     .when().post("http://your-rest-service/"); 
+0

仍然有一些疑問,我創建了Java HashMap並且失敗了。但是你的解決方案工作,任何想法爲什麼它可能失敗與hashamp方法。按照您的示例,我嵌套了json。 – vikramvi

+0

嘿vikramvi,我很久以前就做了這個,我真的不知道在使用hashmap時會發生什麼。 –