Jak mogę dostosować kod statusu odpowiedzi i dane w treści odpowiedzi, jeśli wystąpi wyjątek w aplikacji internetowej Spring Boot?Spring Boot dostosuj odpowiedź błędu http?
Utworzyłem aplikację internetową, która zgłasza niestandardowy wyjątek, jeśli wystąpi coś nieoczekiwanego z powodu złego stanu wewnętrznego. W związku z tym organizm odpowiedź na wniosek, który wywołał błąd wyglądał:
HTTP/1.1 500 Internal Server Error
{
"timestamp": 1412685688268,
"status": 500,
"error": "Internal Server Error",
"exception": "com.example.CustomException",
"message": null,
"path": "/example"
}
Teraz chciałbym zmienić kod stanu i ustawić pola w organizmie reakcji. Jednym z rozwiązań, które przyszło mi do głowy było coś takiego:
@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;
}
)
jednak, że utworzony (jako podejrzane) zupełnie inną odpowiedź:
HTTP/1.1 400 Bad Request
{
"error": "Bad things happened"
}
Więc zarówno zrobić i nie chce odpowiedzi niestandardowy? – zeroflagL
@zeroflagL Najlepiej, chciałbym dostosować odpowiedź generowaną przez Spring Boot (jeśli to możliwe). Wdrożenie kompletnego niestandardowego rozwiązania (takiego, jak podane w pytaniu) działa, ale jest mniej przydatne do wielokrotnego użycia między różnymi projektami. – matsev
To wszystko zależy od Ciebie, jeśli niestandardowe rozwiązanie jest przeznaczone do wielokrotnego użytku. FWIW: ciało resposne jest składane przez 'DefaultErrorAttributes # getErrorAttributes'. Możesz wprowadzić tę klasę do swojego 'CustomResponseEntityExceptionHandler'. – zeroflagL