springframework设置自定义原因短语

时间:2016-03-02 23:31:10

标签: spring rest http spring-mvc

@RestController中,我们使用:

定义了一个自定义ExceptionHandler
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)

这很好用,但我也想修改这个响应会生成的“原因短语”。

目前它总是返回“404 Not Found”

我想将“未找到”文本自定义为其他内容。

我怎样才能做到这一点?

所以我想要的是自定义:

红色dod背后的文字“404”,目前显示“未找到”。这称为HTTP原因短语。

enter image description here

2 个答案:

答案 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