diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/StatusAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/StatusAssertionTests.java index c4de14aa2825abcb772e0ae67d1266f57e08196c..d092d723b30d71126c4b04c36b0e871a2c45e34d 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/StatusAssertionTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/resultmatchers/StatusAssertionTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package org.springframework.test.web.servlet.samples.standalone.resultmatchers; -import org.junit.Before; import org.junit.Test; import org.springframework.http.HttpStatus; @@ -38,12 +37,7 @@ import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*; */ public class StatusAssertionTests { - private MockMvc mockMvc; - - @Before - public void setup() { - this.mockMvc = standaloneSetup(new StatusController()).build(); - } + private final MockMvc mockMvc = standaloneSetup(new StatusController()).build(); @Test public void testStatusInt() throws Exception { @@ -86,7 +80,7 @@ public class StatusAssertionTests { } @RequestMapping("/badRequest") - @ResponseStatus(value=HttpStatus.BAD_REQUEST, reason="Expired token") + @ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "Expired token") public @ResponseBody void badRequest(){ } diff --git a/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java b/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java index e4df7821c193f19adf1a0fc9560ab3223438d45a..17869f83041097d0f32b3e3cc5a78fe73fb9216f 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java +++ b/spring-web/src/main/java/org/springframework/web/bind/annotation/ResponseStatus.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,13 +22,18 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import org.springframework.core.annotation.AliasFor; import org.springframework.http.HttpStatus; /** - * Marks a method or exception class with the status code and reason that should be returned. The status code is applied - * to the HTTP response when the handler method is invoked, or whenever said exception is thrown. + * Marks a method or exception class with the status {@link #code} and + * {@link #reason} that should be returned. + * + *

The status code is applied to the HTTP response when the handler + * method is invoked, or whenever said exception is thrown. * * @author Arjen Poutsma + * @author Sam Brannen * @see org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver * @since 3.0 */ @@ -38,16 +43,27 @@ import org.springframework.http.HttpStatus; public @interface ResponseStatus { /** - * The status code to use for the response. - * + * Alias for {@link #code}. + */ + @AliasFor(attribute = "code") + HttpStatus value() default HttpStatus.INTERNAL_SERVER_ERROR; + + /** + * The status code to use for the response. + *

Default is {@link HttpStatus#INTERNAL_SERVER_ERROR}, which should + * typically be changed to something more appropriate. + * @since 4.2 * @see javax.servlet.http.HttpServletResponse#setStatus(int) */ - HttpStatus value(); + @AliasFor(attribute = "value") + HttpStatus code() default HttpStatus.INTERNAL_SERVER_ERROR; /** - * The reason to be used for the response.

If this element is not set, it will default to the standard status - * message for the status code. Note that due to the use of {@code HttpServletResponse.sendError(int, String)}, - * the response will be considered complete and should not be written to any further. + * The reason to be used for the response. + *

If this attribute is not set, it will default to the standard status + * message for the status code. Note that due to the use of + * {@code HttpServletResponse.sendError(int, String)}, the response will be + * considered complete and should not be written to any further. * * @see javax.servlet.http.HttpServletResponse#sendError(int, String) */ diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java index 49be5840b61cf125d8fd7a370c4607ab8b057e25..62f96c0aaca181fbb95fa66837682bab87cd5890 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java @@ -917,7 +917,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator ResponseStatus responseStatusAnn = AnnotationUtils.findAnnotation(handlerMethod, ResponseStatus.class); if (responseStatusAnn != null) { - HttpStatus responseStatus = responseStatusAnn.value(); + HttpStatus responseStatus = responseStatusAnn.code(); String reason = responseStatusAnn.reason(); if (!StringUtils.hasText(reason)) { webRequest.getResponse().setStatus(responseStatus.value()); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java index 3e8a37318fac6bfd64b4792018c01b9a1989297d..8c823892466a679d873bb5eba7896dae818eba40 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolver.java @@ -379,7 +379,7 @@ public class AnnotationMethodHandlerExceptionResolver extends AbstractHandlerExc ResponseStatus responseStatusAnn = AnnotationUtils.findAnnotation(handlerMethod, ResponseStatus.class); if (responseStatusAnn != null) { - HttpStatus responseStatus = responseStatusAnn.value(); + HttpStatus responseStatus = responseStatusAnn.code(); String reason = responseStatusAnn.reason(); if (!StringUtils.hasText(reason)) { webRequest.getResponse().setStatus(responseStatus.value()); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java index 48e3516eb8a0cb226499b8dfd9cee2e6d402697f..674c03942ff2505366c150c7094ade914c77f4c2 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java @@ -95,7 +95,7 @@ public class ResponseStatusExceptionResolver extends AbstractHandlerExceptionRes protected ModelAndView resolveResponseStatus(ResponseStatus responseStatus, HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - int statusCode = responseStatus.value().value(); + int statusCode = responseStatus.code().value(); String reason = responseStatus.reason(); if (this.messageSource != null) { reason = this.messageSource.getMessage(reason, null, reason, LocaleContextHolder.getLocale()); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java index 4dbbd91ccadbd8feebadf7d72f806582936fb309..5928afd1285fabbb1230d18822a414e0c0f21c19 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethod.java @@ -84,7 +84,7 @@ public class ServletInvocableHandlerMethod extends InvocableHandlerMethod { private void initResponseStatus() { ResponseStatus annotation = getMethodAnnotation(ResponseStatus.class); if (annotation != null) { - this.responseStatus = annotation.value(); + this.responseStatus = annotation.code(); this.responseReason = annotation.reason(); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java index e48d055b3bce00aa709e1afb24102ea508e8a1ac..cbe11134ec20b40c2b2d721b729c93a164ccd879 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java @@ -372,7 +372,7 @@ public class WebMvcConfigurationSupportTests { } - @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "exception.user.exists") + @ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "exception.user.exists") @SuppressWarnings("serial") public static class UserAlreadyExistsException extends RuntimeException { } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolverTests.java index 35dd4368e8574299567f11f0936d90b7de19b6ab..075457cd2cee2e9edb73585aa26a11a2e8213c15 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerExceptionResolverTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -166,7 +166,7 @@ public class AnnotationMethodHandlerExceptionResolverTests { } @ExceptionHandler(SocketException.class) - @ResponseStatus(value = HttpStatus.NOT_ACCEPTABLE, reason = "This is simply unacceptable!") + @ResponseStatus(code = HttpStatus.NOT_ACCEPTABLE, reason = "This is simply unacceptable!") public String handleSocketException(Exception ex, HttpServletResponse response) { return "Y:" + ClassUtils.getShortName(ex.getClass()); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolverTests.java index 99b1fc682c152c81d79a34994d8fdc2a8e046aac..8b99f7732fe843c6c7595a1095bd4cd9ec5857e8 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolverTests.java @@ -110,19 +110,16 @@ public class ResponseStatusExceptionResolverTests { @ResponseStatus(HttpStatus.BAD_REQUEST) @SuppressWarnings("serial") private static class StatusCodeException extends Exception { - } - @ResponseStatus(value = HttpStatus.GONE, reason = "You suck!") + @ResponseStatus(code = HttpStatus.GONE, reason = "You suck!") @SuppressWarnings("serial") private static class StatusCodeAndReasonException extends Exception { - } - @ResponseStatus(value = HttpStatus.GONE, reason = "gone.reason") + @ResponseStatus(code = HttpStatus.GONE, reason = "gone.reason") @SuppressWarnings("serial") private static class StatusCodeAndReasonMessageException extends Exception { - } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java index f780690c7b9b7b3a458a678396d3d5227cfdeef8..6cdc290cc1b1a124cc966ac1d4e44719bed0975d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationControllerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -2992,7 +2992,7 @@ public class ServletAnnotationControllerTests { public static class ResponseStatusController { @RequestMapping("/something") - @ResponseStatus(value = HttpStatus.CREATED, reason = "It's alive!") + @ResponseStatus(code = HttpStatus.CREATED, reason = "It's alive!") public void handle(Writer writer) throws IOException { writer.write("something"); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java index dc90c0da2e5453da70e7ca11ca7a99b09afb1a65..e9931b41a5fec6e249a9d31a032afd8bc03bfe16 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -353,14 +353,14 @@ public class RequestMappingHandlerAdapterIntegrationTests { return "viewName"; } - @ResponseStatus(value=HttpStatus.ACCEPTED) + @ResponseStatus(HttpStatus.ACCEPTED) @ResponseBody public String handleRequestBody(@RequestBody byte[] bytes) throws Exception { String requestBody = new String(bytes, "UTF-8"); return "Handled requestBody=[" + requestBody + "]"; } - @ResponseStatus(value=HttpStatus.ACCEPTED) + @ResponseStatus(code = HttpStatus.ACCEPTED) @ResponseBody public String handleAndValidateRequestBody(@Valid TestBean modelAttr, Errors errors) throws Exception { return "Error count [" + errors.getErrorCount() + "]"; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java index 0e2cb272a85de1e9348c66f2caa0fb2737aa0edb..cf6bffab9f5dea9e1a84c707deae104392665eca 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java @@ -2657,7 +2657,7 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl public static class ResponseStatusController { @RequestMapping("/something") - @ResponseStatus(value = HttpStatus.CREATED, reason = "It's alive!") + @ResponseStatus(code = HttpStatus.CREATED, reason = "It's alive!") public void handle(Writer writer) throws IOException { writer.write("something"); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java index 0c9f54d7ec70e959b949564536a99a570c62f86b..59f8f0ac9b84be046aa238437a9ef11123c842e7 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletInvocableHandlerMethodTests.java @@ -16,9 +16,6 @@ package org.springframework.web.servlet.mvc.method.annotation; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; - import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; @@ -26,7 +23,6 @@ import java.util.List; import javax.servlet.http.HttpServletResponse; -import org.junit.Before; import org.junit.Test; import org.springframework.core.MethodParameter; @@ -50,37 +46,30 @@ import org.springframework.web.method.support.HandlerMethodReturnValueHandlerCom import org.springframework.web.method.support.ModelAndViewContainer; import org.springframework.web.servlet.view.RedirectView; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; /** * Test fixture with {@link ServletInvocableHandlerMethod}. * * @author Rossen Stoyanchev + * @author Sam Brannen */ public class ServletInvocableHandlerMethodTests { - private HandlerMethodArgumentResolverComposite argumentResolvers; + private final HandlerMethodArgumentResolverComposite argumentResolvers = new HandlerMethodArgumentResolverComposite(); - private HandlerMethodReturnValueHandlerComposite returnValueHandlers; + private final HandlerMethodReturnValueHandlerComposite returnValueHandlers = new HandlerMethodReturnValueHandlerComposite(); - private ModelAndViewContainer mavContainer; + private final ModelAndViewContainer mavContainer = new ModelAndViewContainer(); - private ServletWebRequest webRequest; + private final MockHttpServletRequest request = new MockHttpServletRequest(); - private MockHttpServletRequest request; + private final MockHttpServletResponse response = new MockHttpServletResponse(); - private MockHttpServletResponse response; + private final ServletWebRequest webRequest = new ServletWebRequest(this.request, this.response); - @Before - public void setUp() throws Exception { - this.returnValueHandlers = new HandlerMethodReturnValueHandlerComposite(); - this.argumentResolvers = new HandlerMethodArgumentResolverComposite(); - this.mavContainer = new ModelAndViewContainer(); - this.request = new MockHttpServletRequest(); - this.response = new MockHttpServletResponse(); - this.webRequest = new ServletWebRequest(this.request, this.response); - } - @Test public void invokeAndHandle_VoidWithResponseStatus() throws Exception { ServletInvocableHandlerMethod handlerMethod = getHandlerMethod(new Handler(), "responseStatus"); @@ -279,11 +268,11 @@ public class ServletInvocableHandlerMethodTests { return "view"; } - @ResponseStatus(value = HttpStatus.BAD_REQUEST) + @ResponseStatus(HttpStatus.BAD_REQUEST) public void responseStatus() { } - @ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "400 Bad Request") + @ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "400 Bad Request") public String responseStatusWithReason() { return "foo"; } @@ -299,7 +288,6 @@ public class ServletInvocableHandlerMethodTests { } } - @SuppressWarnings("unused") private static class MethodLevelResponseBodyHandler { @ResponseBody @@ -324,12 +312,11 @@ public class ServletInvocableHandlerMethodTests { return new DeferredResult<>(); } - public ResponseEntity handleRawType() { + public ResponseEntity handleRawType() { return ResponseEntity.ok().build(); } } - @SuppressWarnings("unused") private static class ExceptionRaisingReturnValueHandler implements HandlerMethodReturnValueHandler { @Override