J'ai un service Web de repos développé avec Spring Boot.Je suis capable de gérer toutes les exceptions qui se produisent en raison de mon code, mais supposez que l'objet json que le client publie n'est pas compatible avec l'objet avec lequel je veux le désrialiser, je avoir
"timestamp": 1498834369591,
"status": 400,
"error": "Bad Request",
"exception": "org.springframework.http.converter.HttpMessageNotReadableException",
"message": "JSON parse error: Can not deserialize value
Je voulais savoir s'il existe un moyen pour cette exception, je peux fournir au client un message d'exception personnalisé. Je ne sais pas comment gérer cette erreur.
Pour personnaliser ce message par contrôleur, utilisez une combinaison de @ExceptionHandler
et @ResponseStatus
au sein de vos contrôleurs:
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "CUSTOM MESSAGE HERE")
@ExceptionHandler(HttpMessageNotReadableException.class)
public void handleException() {
//Handle Exception Here...
}
Si vous préférez définir ceci une fois et gérer ces exceptions globalement, utilisez un @ControllerAdvice
classe:
@ControllerAdvice
public class CustomControllerAdvice {
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "CUSTOM MESSAGE HERE")
@ExceptionHandler(HttpMessageNotReadableException.class)
public void handleException() {
//Handle Exception Here...
}
}
Vous pouvez également étendre ResponseEntityExceptionHandler et remplacer la méthode handleHttpMessageNotReadable (exemple en Kotlin, mais très similaire en Java):
override fun handleHttpMessageNotReadable(ex: HttpMessageNotReadableException, headers: HttpHeaders, status: HttpStatus, request: WebRequest): ResponseEntity<Any> {
val entity = ErrorResponse(status, ex.message ?: ex.localizedMessage, request)
return this.handleExceptionInternal(ex, entity as Any?, headers, status, request)
}