Removed most exception handlers from spring-rest-full (except the ones used in other articles) and moved them to spring-boot-rest

This commit is contained in:
Ger Roza
2019-01-15 18:45:36 -02:00
parent 4d90ca6c58
commit 22e98e06ea
9 changed files with 154 additions and 107 deletions

View File

@@ -0,0 +1,86 @@
package com.baeldung.web.error;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import com.baeldung.web.exception.MyDataAccessException;
import com.baeldung.web.exception.MyDataIntegrityViolationException;
import com.baeldung.web.exception.MyResourceNotFoundException;
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
public RestResponseEntityExceptionHandler() {
super();
}
// API
// 400
/*
* Some examples of exceptions that we could retrieve as 400 (BAD_REQUEST) responses:
* Hibernate's ConstraintViolationException
* Spring's DataIntegrityViolationException
*/
@ExceptionHandler({ MyDataIntegrityViolationException.class })
public ResponseEntity<Object> handleBadRequest(final MyDataIntegrityViolationException ex, final WebRequest request) {
final String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
}
@Override
protected ResponseEntity<Object> handleHttpMessageNotReadable(final HttpMessageNotReadableException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) {
final String bodyOfResponse = "This should be application specific";
// ex.getCause() instanceof JsonMappingException, JsonParseException // for additional information later on
return handleExceptionInternal(ex, bodyOfResponse, headers, HttpStatus.BAD_REQUEST, request);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(final MethodArgumentNotValidException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) {
final String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, headers, HttpStatus.BAD_REQUEST, request);
}
// 404
/*
* Some examples of exceptions that we could retrieve as 404 (NOT_FOUND) responses:
* Java Persistence's EntityNotFoundException
*/
@ExceptionHandler(value = { MyResourceNotFoundException.class })
protected ResponseEntity<Object> handleNotFound(final RuntimeException ex, final WebRequest request) {
final String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.NOT_FOUND, request);
}
// 409
/*
* Some examples of exceptions that we could retrieve as 409 (CONFLICT) responses:
* Spring's InvalidDataAccessApiUsageException
* Spring's DataAccessException
*/
@ExceptionHandler({ MyDataAccessException.class})
protected ResponseEntity<Object> handleConflict(final RuntimeException ex, final WebRequest request) {
final String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.CONFLICT, request);
}
// 412
// 500
@ExceptionHandler({ NullPointerException.class, IllegalArgumentException.class, IllegalStateException.class })
/*500*/public ResponseEntity<Object> handleInternal(final RuntimeException ex, final WebRequest request) {
logger.error("500 Status Code", ex);
final String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR, request);
}
}

View File

@@ -0,0 +1,21 @@
package com.baeldung.web.exception;
public final class MyDataAccessException extends RuntimeException {
public MyDataAccessException() {
super();
}
public MyDataAccessException(final String message, final Throwable cause) {
super(message, cause);
}
public MyDataAccessException(final String message) {
super(message);
}
public MyDataAccessException(final Throwable cause) {
super(cause);
}
}

View File

@@ -0,0 +1,21 @@
package com.baeldung.web.exception;
public final class MyDataIntegrityViolationException extends RuntimeException {
public MyDataIntegrityViolationException() {
super();
}
public MyDataIntegrityViolationException(final String message, final Throwable cause) {
super(message, cause);
}
public MyDataIntegrityViolationException(final String message) {
super(message);
}
public MyDataIntegrityViolationException(final Throwable cause) {
super(cause);
}
}

View File

@@ -0,0 +1,21 @@
package com.baeldung.web.exception;
public final class MyResourceNotFoundException extends RuntimeException {
public MyResourceNotFoundException() {
super();
}
public MyResourceNotFoundException(final String message, final Throwable cause) {
super(message, cause);
}
public MyResourceNotFoundException(final String message) {
super(message);
}
public MyResourceNotFoundException(final Throwable cause) {
super(cause);
}
}