/*
 * 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
 *
 *      https://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 code and reason that should be returned.

The status code is applied to the HTTP response when the handler method is invoked and overrides status information set by other means, like ResponseEntity or "redirect:".

Warning: when using this annotation on an exception class, or when setting the reason attribute of this annotation, the HttpServletResponse.sendError method will be used.

With 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 reason unsuitable for REST APIs. For such cases it is preferable to use a ResponseEntity as a return type and avoid the use of @ResponseStatus altogether.

Note that a controller class may also be annotated with @ResponseStatus and is then inherited by all @RequestMapping methods.

Author:Arjen Poutsma, Sam Brannen
See Also:
  • ResponseStatusExceptionResolver
  • sendError.sendError(int, String)
Since:3.0
/** * 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 code.
/** * Alias for {@link #code}. */
@AliasFor("code") HttpStatus value() default HttpStatus.INTERNAL_SERVER_ERROR;
The status code to use for the response.

Default is HttpStatus.INTERNAL_SERVER_ERROR, which should typically be changed to something more appropriate.

See Also:
  • setStatus.setStatus(int)
  • sendError.sendError(int)
Since:4.2
/** * 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 reason to be used for the response.
See Also:
  • sendError.sendError(int, String)
/** * The <em>reason</em> to be used for the response. * @see javax.servlet.http.HttpServletResponse#sendError(int, String) */
String reason() default ""; }