http rest JAVA_java – 如何为rest服务中的异常返回http状态代码

您可以使用jax-rs中定义的异常,也可以使用自己的异常. Fist捕获您的业务异常并将其转换为jax-rs版本.例如,对于404,您可以抛出javax.ws.rs.NotFoundException.

您还可以通过从javax.ws.rs.ClientErrorException扩展它们来编写自己的异常

以下是409-Conflict状态异常的示例

import javax.ws.rs.ClientErrorException;

import javax.ws.rs.WebApplicationException;

import javax.ws.rs.core.Response;

public class ConflictException extends ClientErrorException{

public ConflictException(Response.Status status) {

super(Response.Status.CONFLICT); // 409

}

}

更新

最简单可行的方法是捕获业务异常并使用jax-rs异常重新抛出它们.

try{

businessService.executeBusinessRule();

}catch (BusinessException e){

// It is better if your BusinessException has some child class to handle

if(e.getError() == ErrorEnumeration.VALIDATION_FAILED){

throw new BadRequestException();

}else{

throw new ConflictException();

}

}

如果你使用spring,你总是可以使用aop捕获这些异常.

@Aspect

public class BusinessExceptionInterceptor{

@AfterThrowing(pointcut = "execution(* com.your.service.packge..* (..))", throwing = "e")

public void errorInterceptor(BusinessException e) {

// re-throw again...

}

更新2

此外,最好定义一个新的异常,而不是重复使用不同状态的相同异常.您可以定义一个新的ValidationException,它从BusinessException扩展,如下所示.

public class ValidationException extends BusinessException{

public ValidationException() {

super(ErrorEnumeration.VALIDATION_FAILED);

}

}

通过使用这种方式,您仍然可以处理所有BusinessException,但更容易识别或将它们映射到Jax-rs异常.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值