2016-10-05 79 views
0

Play 1.x似乎具有此功能,但在2.x文檔中找不到示例。如果acceptscontent-type不匹配,有沒有辦法將控制器配置爲返回415?我可以在這樣的控制器手動做到這一點:如何使用Play來返回415不支持的媒體類型?

// for GET, POST, PUT, etc. 
if (!request().accepts(Http.MimeTypes.JSON)) { 
    return new StatusHeader(UNSUPPORTED_MEDIA_TYPE); 
} 
// for POST, PUT, PATCH, etc. 
if (!request().contentType().orElse("").equals(Http.MimeTypes.JSON)) { 
    return new StatusHeader(UNSUPPORTED_MEDIA_TYPE); 
} 

但好像這是一件應該由框架W/O不必使用代碼塊中的每個控制器方法支持。

回答

1

Play 2.5.x確實爲此提供支持。

道歉,我的例子是在斯卡拉,但你可以實現與Java API一樣 - 只需檢查下面的文檔。

// Scala example 

def accept = Action(parse.json) { implicit request => 
    render { 
     case Accepts.Json() => Ok(Json.parse("""{"message" : "Thanks for sending and accepting JSON"}""")) 
    } 
    } 

通過指定您正在使用一個明確的parse.json體分析器,播放如果客戶端嘗試發送超過application/json的內容類型之外的任何會自動建立一個結果與你415代碼。見the Java examples涵蓋這一點。

case Accepts.Json()是一個提取器,用於測試介質類型是否在範圍內(即在您的用例中爲application/json)。如果客戶端發送不同的媒體類型,那麼我認爲Play會構建一個406 Not Acceptable。見the Java examples

+0

謝謝。我發誓我看了看文檔,但不知何故仍然錯過了這一點。 – Eric

相關問題