2016-03-02 59 views
0

@RestController,我們使用定義一個定製的ExceptionHandler。springframework的設置自​​定義的原因短語

在它總是返回時刻「404未找到」

我要定製的「未找到」文本到別的東西。

我怎樣才能做到這一點?

所以,我要的是自定義:

紅色國防部以「404」,目前說背後的文字「未發現」。這被稱爲HTTP原因短語。

enter image description here

+0

嗨@ seba.wagner我想達到同樣的目的,你有沒有得到任何解決方案或解決方法? – KingKari

+0

只看@pczeus給出的下一個答案 –

回答

0

嘗試:

@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

+0

不,這是做什麼的:在我的初始配置中使用@ResponseStatus(HttpStatus.NOT_FOUND)它返回了一個JSON響應和一個http.status 404和http.reason Not Found。隨着你的修改它返回404錯誤頁面,在那個頁面有

HTTP狀態404 - 因爲我說的是這樣!

http.status是404然而,http的原因短語仍然是「未找到」,而不是「因爲我說了這麼!」。此外,我不想有http錯誤頁面,但我的Json響應正文。 –

+0

這對我來說很好,我已經添加到答案中。你如何訪問端點URL?瀏覽器,一個REST客戶端?你在使用Spring Boot嗎? – pczeus

+0

但這不是重點。我想要的是自定義原因短語的字符串。不是響應主體中的文本。看看我附加的圖像。 「404」後的紅點背後的文字。這被稱爲「原因詞組」。我想返回一個自定義的原因短語。 –

0

嘗試自定義HTTP/1.1原因短語可能沒有意義 - HTTP/2中沒有任何理由短語。所以將它用於任何重要的東西都是短視的。