在@RestController
,我們使用定義一個定製的ExceptionHandler。springframework的設置自定義的原因短語
在它總是返回時刻「404未找到」
我要定製的「未找到」文本到別的東西。
我怎樣才能做到這一點?
所以,我要的是自定義:
紅色國防部以「404」,目前說背後的文字「未發現」。這被稱爲HTTP原因短語。
在@RestController
,我們使用定義一個定製的ExceptionHandler。springframework的設置自定義的原因短語
在它總是返回時刻「404未找到」
我要定製的「未找到」文本到別的東西。
我怎樣才能做到這一點?
所以,我要的是自定義:
紅色國防部以「404」,目前說背後的文字「未發現」。這被稱爲HTTP原因短語。
嘗試:
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Cuz I said so!") // 404
我創建了一個簡單的Spring啓動應用程序(使用Groovy而不是Java)。我在這裏創造出一個非常簡單的REST控制器:
@RestController
class TestController {
@RequestMapping("/")
def there(){
throw new IllegalArgumentException("IAE Error")
}
@RequestMapping("testerror")
@ExceptionHandler(IllegalArgumentException.class)
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Cuz I said so!") // 404
def testError(){
"TestError"
}
}
的響應是404,具有以下JSON返回:
{
"timestamp": 1456972233805,
"status": 404,
"error": "Not Found",
"exception": "java.lang.IllegalArgumentException",
"message": "Cuz I said so!",
"path": "/"
}
你可以看到,「理性」作爲返回「消息'在JSON響應中。
因爲Spring不允許你改變HttpStatus類型,它們是不變的[HttpStatus]對象,並且被認爲是HTTP 1.1 RFC中定義明確的標準。
然而,您可以使用自定義代碼和原因創建自己的自定義HttpStatus類型。但是,如果你決定這麼做,你應該使用不屬於定義標準的代碼。
相反,您可能會考慮遵循良好REST設計最佳實踐的示例。一個很好的示例文章可以在這裏找到:REST Best Practices
不,這是做什麼的:在我的初始配置中使用@ResponseStatus(HttpStatus.NOT_FOUND)它返回了一個JSON響應和一個http.status 404和http.reason Not Found。隨着你的修改它返回404錯誤頁面,在那個頁面有
這對我來說很好,我已經添加到答案中。你如何訪問端點URL?瀏覽器,一個REST客戶端?你在使用Spring Boot嗎? – pczeus
但這不是重點。我想要的是自定義原因短語的字符串。不是響應主體中的文本。看看我附加的圖像。 「404」後的紅點背後的文字。這被稱爲「原因詞組」。我想返回一個自定義的原因短語。 –
嘗試自定義HTTP/1.1原因短語可能沒有意義 - HTTP/2中沒有任何理由短語。所以將它用於任何重要的東西都是短視的。
嗨@ seba.wagner我想達到同樣的目的,你有沒有得到任何解決方案或解決方法? – KingKari
只看@pczeus給出的下一個答案 –