我使用傑克遜的Restlet 2.1來構建json REST api。當Restlet返回400錯誤請求時,Restlet是否返回415 Unsupported Media Type?
當我用期望的內容類型但格式不正確的機構發出請求時,我得到一個415「Unsuppored Media Type」狀態代碼。我認爲正確的錯誤代碼應該是400「錯誤請求」。
顯然,當傑克遜嘗試並未能解碼垃圾時,會發生混淆。
我會盡力的情況下作出了一些代碼更加清晰:
// java method mapping
@Post("json")
public Project create(Project project) {
服務調用,捲曲
$ curl -i -XPOST -H 'content-type: application/json' -d '{xgarbage}' http://localhost:8080/projects HTTP/1.1 415 Unsupported Media Type
並在日誌中的堆棧跟蹤OS recorde的fragmente:
Nov 29, 2010 9:51:56 PM org.restlet.ext.jackson.JacksonRepresentation getObject
WARNING: Unable to parse the object with Jackson.
org.codehaus.jackson.JsonParseException: Unexpected character ('x' (code 120)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: [email protected]; line: 1, column: 2]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:929)
該服務的實際實施從未被擊中,所以在某個地方作出決定的地圖將亂碼內容改爲415.
現在,我的問題是:這是正確的嗎?如果我正確地閱讀了「REST風格的Web服務」一書中的以下引用,但這不是,但我願意更正。
[400錯誤請求]當客戶端提交表示以及PUT或POST請求,並且表示格式正確但沒有任何意義時,通常使用它。
。
[415 Unsupported Media Type]如果客戶端發送的文檔具有正確的媒體類型但格式錯誤(例如用錯誤詞彙表編寫的XML文檔),則更好的響應是更通用的400( 「錯誤的請求」)
對還是錯,我寧願返回一個400
有沒有辦法改變的行爲,而在傑克遜提供的自動魔法系列化放棄?
任何幫助,非常感謝, 謝謝!
我想這是有爭議的:格式化和格式良好是兩個不同的東西(你可以有一個corruped jpg)。我認爲服務器應該以不同的方式表示「嘿,你試圖發送apllication/foo,我不支持它」,並且「是的,我們確實支持json,但是你的數據被破壞了」。 – 2010-11-30 16:30:11