Использование Spring Boot Rest API: у меня есть конечная точка, которую я использую для входа пользователя.Если учетные данные пользователя недействительны, генерируется исключение UnauthorizedException с пользовательским сообщением.
Используя пользовательское исключение и объект ErrorDetails, я соответственно установил ответ на сообщение об ошибке.
Однако япродолжайте получать ответ JSON от Spring Boot, содержащий обширный заголовок.Как мне настроить заголовок так, чтобы он возвращал только то, что я хочу видеть?
Это сообщение JSON, которое я получаю в ответ.Однако я предпочел бы получить только ошибку: {} ее часть.
</p>
<pre><code>{
"headers": {
"normalizedNames": {},
"lazyUpdate": null
},
"status": 401,
"statusText": "OK",
"url": "http://localhost:8080/access/login",
"ok": false,
"name": "HttpErrorResponse",
"message": "Http failure response for http://localhost:8080/access/login: 401 OK",
"error": {
"message": "Invalid username and/or password.",
"details": "uri=/access/login",
"timestamp": "2019-03-29T14:52:28.863+0000"
}
}
Это код, используемый для ControllerAdvice,ErrorDetails и UnauthorizedException:
</p>
<pre><code>public class ErrorDetails {
private String message;
private String details;
private Date timestamp;
public ErrorDetails(String message, String details, Date timestamp) {
super();
this.message = message;
this.details = details;
this.timestamp = timestamp;
}
public String getMessage() {
return message;
}
public String getDetails() {
return details;
}
public Date getTimestamp() {
return timestamp;
}
public void setMessage(String message) {
this.message = message;
}
public void setDetails(String details) {
this.details = details;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
}
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(UnauthorizedException.class)
public ResponseEntity<ErrorDetails> unauthorizedException(UnauthorizedException e, WebRequest webRequest) {
ErrorDetails errorDetails = new ErrorDetails(e.getMessage(), webRequest.getDescription(false),new Date());
return new ResponseEntity<>(errorDetails, HttpStatus.UNAUTHORIZED);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<?> globalExceptionHandler(Exception e, WebRequest webRequest) {
ErrorDetails errorDetails = new ErrorDetails(e.getMessage(), webRequest.getDescription(false),new Date());
return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
public class UnauthorizedException extends Exception {
private static final long serialVersionUID = 1L;
public UnauthorizedException(String message) {
super(message);
}
}