如果在Spring Boot Web应用程序中发生异常,我如何自定义响应状态码和响应正文中的数据?Spring Boot自定义http错误响应?
我已经创建了一个Web应用程序,如果由于某些内部状态不正常而导致意外发生,则会引发自定义异常。因此,触发错误的请求的响应机身看起来是这样的:
HTTP/1.1 500 Internal Server Error
{
"timestamp": 1412685688268,
"status": 500,
"error": "Internal Server Error",
"exception": "com.example.CustomException",
"message": null,
"path": "/example"
}
现在,我想改变状态代码,并设置在响应正文中的字段。掠过我想到的一个解决办法是这样的:
@ControllerAdvice
class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
ErrorMessage handleBadCredentials(CustomException e) {
return new ErrorMessage("Bad things happened");
}
}
@XmlRootElement
public class ErrorMessage(
private String error;
public ErrorMessage() {
}
public ErrorMessage(String error) {
this.error = error;
}
public String getError() {
return error;
}
public void setError(String error) {
this.error = error;
}
)
然而,创建(涉嫌)完全不同的反应:
HTTP/1.1 400 Bad Request
{
"error": "Bad things happened"
}
使您无论做,不想自定义响应? – zeroflagL 2014-10-07 13:22:42
@zeroflagL最好我想定制Spring Boot生成的响应(如果可能的话)。实现完整的自定义解决方案(如问题中提供的解决方案)可行,但在不同项目之间重复使用的可能性较低。 – matsev 2014-10-07 13:44:17
如果自定义解决方案可重复使用,完全取决于您。 FWIW:resposne正文由'DefaultErrorAttributes#getErrorAttributes'组装。你可以将这个类注入到你的'CustomResponseEntityExceptionHandler'中。 – zeroflagL 2014-10-07 14:05:04