提交 6a5b2672 编写于 作者: S Sam Brannen

Introduce alias for 'value' attribute in @ResponseStatus

Issue: SPR-11393
上级 c55486d5
/*
* 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(){
}
......
/*
* 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.
*
* <p>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 <em>code</em> to use for the response.
* <p>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. <p>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 <em>reason</em> to be used for the response.
* <p>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)
*/
......
......@@ -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());
......
......@@ -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());
......
......@@ -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());
......
......@@ -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();
}
}
......
......@@ -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 {
}
......
/*
* 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());
}
......
......@@ -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 {
}
}
/*
* 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");
}
......
/*
* 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() + "]";
......
......@@ -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");
}
......
......@@ -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<Void> handleRawType() {
return ResponseEntity.ok().build();
}
}
@SuppressWarnings("unused")
private static class ExceptionRaisingReturnValueHandler implements HandlerMethodReturnValueHandler {
@Override
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册