minor fix
This commit is contained in:
parent
699c3d5b3f
commit
e238c6cc9c
|
@ -92,6 +92,13 @@
|
||||||
<version>${jstl.version}</version>
|
<version>${jstl.version}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.validation</groupId>
|
||||||
|
<artifactId>validation-api</artifactId>
|
||||||
|
<version>${javax.validation.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- marshalling -->
|
<!-- marshalling -->
|
||||||
|
|
||||||
|
@ -283,6 +290,7 @@
|
||||||
<!-- various -->
|
<!-- various -->
|
||||||
<hibernate-validator.version>5.2.2.Final</hibernate-validator.version>
|
<hibernate-validator.version>5.2.2.Final</hibernate-validator.version>
|
||||||
<javax.servlet-api.version>3.0.1</javax.servlet-api.version>
|
<javax.servlet-api.version>3.0.1</javax.servlet-api.version>
|
||||||
|
<javax.validation.version>1.1.0.Final</javax.validation.version>
|
||||||
<jstl.version>1.2</jstl.version>
|
<jstl.version>1.2</jstl.version>
|
||||||
<jackson.version>2.2.2</jackson.version>
|
<jackson.version>2.2.2</jackson.version>
|
||||||
<springfox.version>2.2.2</springfox.version>
|
<springfox.version>2.2.2</springfox.version>
|
||||||
|
|
|
@ -2,10 +2,14 @@ package org.baeldung.persistence.model;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Size;
|
||||||
|
|
||||||
|
|
||||||
public class Foo implements Serializable {
|
public class Foo implements Serializable {
|
||||||
|
|
||||||
private long id;
|
private long id;
|
||||||
|
|
||||||
|
@Size(min = 5, max = 14)
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
public Foo() {
|
public Foo() {
|
||||||
|
|
|
@ -3,6 +3,9 @@ package org.baeldung.web;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.validation.ConstraintViolation;
|
||||||
|
import javax.validation.ConstraintViolationException;
|
||||||
|
|
||||||
import org.springframework.beans.TypeMismatchException;
|
import org.springframework.beans.TypeMismatchException;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
@ -67,16 +70,6 @@ public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {
|
||||||
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler({ MethodArgumentTypeMismatchException.class })
|
|
||||||
public ResponseEntity<Object> handleMethodArgumentTypeMismatch(final MethodArgumentTypeMismatchException ex, final WebRequest request) {
|
|
||||||
logger.info(ex.getClass().getName());
|
|
||||||
//
|
|
||||||
final String error = ex.getName() + " should be of type " + ex.getRequiredType().getName();
|
|
||||||
|
|
||||||
final ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), error);
|
|
||||||
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ResponseEntity<Object> handleMissingServletRequestPart(final MissingServletRequestPartException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) {
|
protected ResponseEntity<Object> handleMissingServletRequestPart(final MissingServletRequestPartException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) {
|
||||||
logger.info(ex.getClass().getName());
|
logger.info(ex.getClass().getName());
|
||||||
|
@ -95,6 +88,32 @@ public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {
|
||||||
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
@ExceptionHandler({ MethodArgumentTypeMismatchException.class })
|
||||||
|
public ResponseEntity<Object> handleMethodArgumentTypeMismatch(final MethodArgumentTypeMismatchException ex, final WebRequest request) {
|
||||||
|
logger.info(ex.getClass().getName());
|
||||||
|
//
|
||||||
|
final String error = ex.getName() + " should be of type " + ex.getRequiredType().getName();
|
||||||
|
|
||||||
|
final ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), error);
|
||||||
|
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ExceptionHandler({ ConstraintViolationException.class })
|
||||||
|
public ResponseEntity<Object> handleConstraintViolation(final ConstraintViolationException ex, final WebRequest request) {
|
||||||
|
logger.info(ex.getClass().getName());
|
||||||
|
//
|
||||||
|
final List<String> errors = new ArrayList<String>();
|
||||||
|
for (final ConstraintViolation<?> violation : ex.getConstraintViolations()) {
|
||||||
|
errors.add(violation.getRootBeanClass().getName() + " " + violation.getPropertyPath() + ": " + violation.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
final ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), errors);
|
||||||
|
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
// 404
|
// 404
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -116,7 +135,7 @@ public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {
|
||||||
final StringBuilder builder = new StringBuilder();
|
final StringBuilder builder = new StringBuilder();
|
||||||
builder.append(ex.getMethod());
|
builder.append(ex.getMethod());
|
||||||
builder.append(" method is not supported for this request. Supported methods are ");
|
builder.append(" method is not supported for this request. Supported methods are ");
|
||||||
ex.getSupportedMethods();
|
ex.getSupportedHttpMethods().forEach(t -> builder.append(t + " "));
|
||||||
|
|
||||||
final ApiError apiError = new ApiError(HttpStatus.METHOD_NOT_ALLOWED, ex.getLocalizedMessage(), builder.toString());
|
final ApiError apiError = new ApiError(HttpStatus.METHOD_NOT_ALLOWED, ex.getLocalizedMessage(), builder.toString());
|
||||||
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
||||||
|
@ -131,7 +150,7 @@ public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {
|
||||||
final StringBuilder builder = new StringBuilder();
|
final StringBuilder builder = new StringBuilder();
|
||||||
builder.append(ex.getContentType());
|
builder.append(ex.getContentType());
|
||||||
builder.append(" media type is not supported. Supported media types are ");
|
builder.append(" media type is not supported. Supported media types are ");
|
||||||
ex.getSupportedMediaTypes().forEach(t -> builder.append(t + ", "));
|
ex.getSupportedMediaTypes().forEach(t -> builder.append(t + " "));
|
||||||
|
|
||||||
final ApiError apiError = new ApiError(HttpStatus.UNSUPPORTED_MEDIA_TYPE, ex.getLocalizedMessage(), builder.substring(0, builder.length() - 2));
|
final ApiError apiError = new ApiError(HttpStatus.UNSUPPORTED_MEDIA_TYPE, ex.getLocalizedMessage(), builder.substring(0, builder.length() - 2));
|
||||||
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
||||||
|
@ -143,6 +162,7 @@ public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {
|
||||||
@ExceptionHandler({ Exception.class })
|
@ExceptionHandler({ Exception.class })
|
||||||
public ResponseEntity<Object> handleAll(final Exception ex, final WebRequest request) {
|
public ResponseEntity<Object> handleAll(final Exception ex, final WebRequest request) {
|
||||||
logger.info(ex.getClass().getName());
|
logger.info(ex.getClass().getName());
|
||||||
|
logger.error("error", ex);
|
||||||
//
|
//
|
||||||
final ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, ex.getLocalizedMessage(), "error occurred");
|
final ApiError apiError = new ApiError(HttpStatus.INTERNAL_SERVER_ERROR, ex.getLocalizedMessage(), "error occurred");
|
||||||
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
|
||||||
|
|
|
@ -32,9 +32,10 @@ public class FooLiveTest {
|
||||||
assertEquals(HttpStatus.BAD_REQUEST, error.getStatus());
|
assertEquals(HttpStatus.BAD_REQUEST, error.getStatus());
|
||||||
assertEquals(1, error.getErrors().size());
|
assertEquals(1, error.getErrors().size());
|
||||||
assertTrue(error.getErrors().get(0).contains("should be of type"));
|
assertTrue(error.getErrors().get(0).contains("should be of type"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenNoHandlerForHttpRequest_thenNotFound() {
|
public void whenNoHandlerForHttpRequest_thenNotFound() {
|
||||||
final Response response = givenAuth().delete(URL_PREFIX + "/api/xx");
|
final Response response = givenAuth().delete(URL_PREFIX + "/api/xx");
|
||||||
|
@ -42,6 +43,8 @@ public class FooLiveTest {
|
||||||
assertEquals(HttpStatus.NOT_FOUND, error.getStatus());
|
assertEquals(HttpStatus.NOT_FOUND, error.getStatus());
|
||||||
assertEquals(1, error.getErrors().size());
|
assertEquals(1, error.getErrors().size());
|
||||||
assertTrue(error.getErrors().get(0).contains("No handler found"));
|
assertTrue(error.getErrors().get(0).contains("No handler found"));
|
||||||
|
System.out.println(response.asString());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -51,6 +54,8 @@ public class FooLiveTest {
|
||||||
assertEquals(HttpStatus.METHOD_NOT_ALLOWED, error.getStatus());
|
assertEquals(HttpStatus.METHOD_NOT_ALLOWED, error.getStatus());
|
||||||
assertEquals(1, error.getErrors().size());
|
assertEquals(1, error.getErrors().size());
|
||||||
assertTrue(error.getErrors().get(0).contains("Supported methods are"));
|
assertTrue(error.getErrors().get(0).contains("Supported methods are"));
|
||||||
|
System.out.println(response.asString());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -60,6 +65,8 @@ public class FooLiveTest {
|
||||||
assertEquals(HttpStatus.UNSUPPORTED_MEDIA_TYPE, error.getStatus());
|
assertEquals(HttpStatus.UNSUPPORTED_MEDIA_TYPE, error.getStatus());
|
||||||
assertEquals(1, error.getErrors().size());
|
assertEquals(1, error.getErrors().size());
|
||||||
assertTrue(error.getErrors().get(0).contains("media type is not supported"));
|
assertTrue(error.getErrors().get(0).contains("media type is not supported"));
|
||||||
|
System.out.println(response.asString());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue