Merge branch '2.0.x'

pull/13373/merge
Stephane Nicoll 6 years ago
commit 8f1729e322

@ -22,9 +22,11 @@ import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.support.WebExchangeBindException;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.server.ResponseStatusException;
@ -46,6 +48,7 @@ import org.springframework.web.server.ServerWebExchange;
*
* @author Brian Clozel
* @author Stephane Nicoll
* @author Michele Mancioppi
* @since 2.0.0
* @see ErrorAttributes
*/
@ -91,6 +94,11 @@ public class DefaultErrorAttributes implements ErrorAttributes {
if (error instanceof ResponseStatusException) {
return ((ResponseStatusException) error).getStatus();
}
ResponseStatus responseStatus = AnnotatedElementUtils
.findMergedAnnotation(error.getClass(), ResponseStatus.class);
if (responseStatus != null) {
return responseStatus.code();
}
return HttpStatus.INTERNAL_SERVER_ERROR;
}
@ -101,6 +109,11 @@ public class DefaultErrorAttributes implements ErrorAttributes {
if (error instanceof ResponseStatusException) {
return ((ResponseStatusException) error).getReason();
}
ResponseStatus responseStatus = AnnotatedElementUtils
.findMergedAnnotation(error.getClass(), ResponseStatus.class);
if (responseStatus != null) {
return responseStatus.reason();
}
return error.getMessage();
}

@ -33,6 +33,7 @@ import org.springframework.mock.web.server.MockServerWebExchange;
import org.springframework.validation.BindingResult;
import org.springframework.validation.MapBindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.support.WebExchangeBindException;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.server.ResponseStatusException;
@ -87,6 +88,29 @@ public class DefaultErrorAttributesTests {
assertThat(attributes.get("status")).isEqualTo(500);
}
@Test
public void annotatedResponseStatusCode() {
Exception error = new CustomException();
MockServerHttpRequest request = MockServerHttpRequest.get("/test").build();
Map<String, Object> attributes = this.errorAttributes
.getErrorAttributes(buildServerRequest(request, error), false);
assertThat(attributes.get("error"))
.isEqualTo(HttpStatus.I_AM_A_TEAPOT.getReasonPhrase());
assertThat(attributes.get("status")).isEqualTo(HttpStatus.I_AM_A_TEAPOT.value());
}
@Test
public void annotatedResponseStatusCodeWithCustomReasonPhrase() {
Exception error = new Custom2Exception();
MockServerHttpRequest request = MockServerHttpRequest.get("/test").build();
Map<String, Object> attributes = this.errorAttributes
.getErrorAttributes(buildServerRequest(request, error), false);
assertThat(attributes.get("error"))
.isEqualTo(HttpStatus.I_AM_A_TEAPOT.getReasonPhrase());
assertThat(attributes.get("status")).isEqualTo(HttpStatus.I_AM_A_TEAPOT.value());
assertThat(attributes.get("message")).isEqualTo("Nope!");
}
@Test
public void includeStatusCode() {
MockServerHttpRequest request = MockServerHttpRequest.get("/test").build();
@ -211,4 +235,14 @@ public class DefaultErrorAttributesTests {
return 42;
}
@ResponseStatus(HttpStatus.I_AM_A_TEAPOT)
private static class CustomException extends RuntimeException {
}
@ResponseStatus(value = HttpStatus.I_AM_A_TEAPOT, reason = "Nope!")
private static class Custom2Exception extends RuntimeException {
}
}

Loading…
Cancel
Save