如果在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