2016-03-02 60 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中没有任何理由短语。所以将它用于任何重要的东西都是短视的。