spring Controller中返回自定义状态码

spring Controller中返回自定义状态码

本文我们讨论几种方式从spring mvc conroller中返回自定义的Http状态码。为了更清楚地给客户端描述请求结果,使用丰富的HTTP协议语言比较重要。例如,当发生请求错误时,针对不同的错误类型发送一个特定的错误代码,客户端根据错误消息展示相应的错误消息。

返回自定义状态码

spring 提供多种方式从Controller类中返回自定义状态码:
* 使用ResponseEntity类
* 在异常类上使用@ResponseStatus注解
* 使用@ControllerAdvice 和 @ExceptionHandler 注解

这几种方式并不是相互排斥,相反它们可以相互补充。本文我们介绍前两种方式 (ResponseEntity 和 @ResponseStatus)。后续继续说明其他方式。

通过ResponseEntity类返回状态码

在标准的spring mvc Controller中,我们定义简单的映射:

@RequestMapping(value = "/controller", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity sendViaResponseEntity() {
    return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE);
}

一旦收到get 请求 “/controller” ,spring将返回406响应(不可接受)。这里随意选择了一个特定的响应码,你能返回HTTP状态码,完整的状态码参考文档

通过异常类返回状态码

这里描述第二种方法通过异常类返回状态码:

@RequestMapping(value = "/exception", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity sendViaException() {
    throw new ForbiddenException();
}

当收到get 请求 “/exception”,spring 将抛出ForbiddenException类异常,定义为独立类并增加相应注解:

@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {}

异常类中无需其他相关代码,仅需要@ResponseStatus注解。当抛出异常时,控制器返回403响应码(FORBIDDEN),如果必要,在注解中增加相应消息。

@ResponseStatus(value = HttpStatus.FORBIDDEN, reason="To show an example of a custom message")
public class ForbiddenException extends RuntimeException {}

需要特别说明的是技术上可以返回任意状态码,但错误的状态码可能引起逻辑上误解。一般使用(4XX 和 5XX)。

总结

本文描述如何从spring mvc Controller中返回自定义状态码。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值