/* * Copyright 2002-2017 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. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.web.bind.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; 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 {@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 and overrides status information set by other means, * like {@code ResponseEntity} or {@code "redirect:"}. * * <p><strong>Warning</strong>: when using this annotation on an exception * class, or when setting the {@code reason} attribute of this annotation, * the {@code HttpServletResponse.sendError} method will be used. * * <p>With {@code HttpServletResponse.sendError}, the response is considered * complete and should not be written to any further. Furthermore, the Servlet * container will typically write an HTML error page therefore making the * use of a {@code reason} unsuitable for REST APIs. For such cases it is * preferable to use a {@link org.springframework.http.ResponseEntity} as * a return type and avoid the use of {@code @ResponseStatus} altogether. * * <p>Note that a controller class may also be annotated with * {@code @ResponseStatus} and is then inherited by all {@code @RequestMapping} * methods. * * @author Arjen Poutsma * @author Sam Brannen * @since 3.0 * @see org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver * @see javax.servlet.http.HttpServletResponse#sendError(int, String) */ @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ResponseStatus { /** * Alias for {@link #code}. */ @AliasFor("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) * @see javax.servlet.http.HttpServletResponse#sendError(int) */ @AliasFor("value") HttpStatus code() default HttpStatus.INTERNAL_SERVER_ERROR; /** * The <em>reason</em> to be used for the response. * @see javax.servlet.http.HttpServletResponse#sendError(int, String) */ String reason() default ""; }