在@RestController
中,我们使用:
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
这很好用,但我也想修改这个响应会生成的“原因短语”。
目前它总是返回“404 Not Found”
我想将“未找到”文本自定义为其他内容。
我怎样才能做到这一点?
所以我想要的是自定义:
红色dod背后的文字“404”,目前显示“未找到”。这称为HTTP原因短语。
答案 0 :(得分:2)
尝试自定义HTTP / 1.1原因短语可能毫无意义 - HTTP / 2中没有原因短语。因此,将它用于任何重要的事情都是短视的。
答案 1 :(得分:0)
尝试:
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Cuz I said so!") // 404
我创建了一个简单的Spring Boot应用程序(使用Groovy而不是Java)。我在这里创建了一个非常简单的Rest Controller:
@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