J'ai un @RestControllerAdvice où je gère une exception dans Spring Boot. Je souhaite enregistrer une information envoyée via le corps de la demande. Comment puis-je obtenir ces informations à partir d'un Spring WebRequest?
Ceci est mon exemple de gestionnaire d'exceptions.
@RestControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
// I want to add something here that I could log an info that is in the request body.
return super.handleMethodArgumentNotValid(ex, headers, status, request);
}
}
@M.Deinum J'ai essayé d'utiliser ContentCachingRequestWrapper, mais je n'ai pas pu accéder au contenu du corps. La méthode contentCachingRequestWrapper.getContentAsByteArray() renvoie null.
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
try {
ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper((HttpServletRequest) request);
wrappedRequest.getContentAsByteArray();
wrappedRequest.getInputStream();
chain.doFilter(wrappedRequest, response);
} finally {
LoggingContext.clear();
}
Solution du problème
RequestBody et ResponseBody peuvent être en lecture seule une fois, donc d'autres façons d'atteindre le corps dans le gestionnaire d'exceptions
Visitez ici
Aucun commentaire:
Enregistrer un commentaire