14 Ocak 2021 Perşembe

SpringMVC ResponseEntityExceptionHandler Sınıfı - Standart Spring Exception'ları İçindir

Giriş
Şu satırı dahil ederiz
import org.springframework.web.servlet.mvc.method.annotation.
ResponseEntityExceptionHandler;
Exception döndürmek için 3 yöntem var
- @ControllerAdvice + @ExceptionHandler : Global Exception handling yapar
- HandlerExceptionResolver
- ResponseStatusException
@ControllerAdvice anotasyonuna sahip sınıf ResponseEntityExceptionHandler'dan kalıtabilir.

Spring tarafından üretilen ve fırlatın exception'ları yakalayıp, ResponseEntity dönen metodlar sağlar. Eğer daha özelleştirilmiş bir ResponseEntity dönmek istiyorsak metodları override etmek gerekir.

handleExceptionInternal metodu
Örnek
Şöyle yaparız
import org.springframework.http.ProblemDetail; @Override protected ResponseEntity<Object> handleMissingServletRequestParameter( MissingServletRequestParameterException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { // Customize type and detail for MissingServletRequestParameterException ProblemDetail body = ex.getBody() .withType(URI.create("/problem/bad-request")) .withDetail("Expected parameter: " + ex.getParameterName()); return handleExceptionInternal(ex, body, headers, status, request); } @Override protected ResponseEntity<Object> handleExceptionInternal( Exception ex, Object body, HttpHeaders headers, HttpStatusCode statusCode, WebRequest request) { // ProblemDetail extended for all exceptions if (body instanceof ProblemDetail detail) { ... } return super.handleExceptionInternal(ex, body, headers, statusCode, request); }
handleMethodArgumentNotValid metodu
Açıklaması şöyle
When a validation error occurs in a Spring application, a MethodArgumentNotValidException is thrown. By default, Spring returns a general error response with a 400 Bad Request status. This response contains detailed information about the errors, but it may be more verbose than needed and not always user-friendly.
Method parametresinde @Valid anotasyonu varsa ve girdi hatalıysa, Spring MethodArgumentNotValidException fırlatır. Bu exception'ı yakalamak içindir.
 
Örnek
Şöyle yaparız
@ControllerAdvice
public class BillingExceptionHandler extends ResponseEntityExceptionHandler {

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException arguments, HttpHeaders headers, HttpStatus status,
  WebRequest request) {
...
}
}

Hiç yorum yok:

Yorum Gönder