【问题标题】:How can I write an exception class with specific http status code in JAVA如何在 JAVA 中编写具有特定 http 状态代码的异常类
【发布时间】:2018-01-21 04:34:44
【问题描述】:

如何抛出具有特定 http 状态的异常?我想生成具有 403 Forbidden 状态的异常。 我使用了 jax-rs 库,但它只是更改了消息,状态码仍然是 500。

if (countRequest > 10) {
    throw new WebApplicationException(Response.Status.FORBIDDEN);
}

邮递员的输出:

{
    "timestamp": 1502582674498,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "javax.ws.rs.WebApplicationException",
    "message": "HTTP 403 Forbidden",
    "path": "/timesheets/late/61/cancel"
}

【问题讨论】:

  • 您应该向我们展示您尝试过什么以及获得了什么?
  • 异常没有状态。你可能在谈论jax-rs 这不是我应该猜到的。请尝试提出更明确的问题,以表明您真正想要什么以及您尝试过什么。
  • 您可以将任何您想要的属性放在您创建的自定义类上。您尝试了什么,它以什么方式“不起作用”?

标签: java exception


【解决方案1】:

您可以使用ExceptionMapper 执行此操作,如下所示:

  @Provider 
  public class CustomExceptionMapper implements ExceptionMapper<WebApplicationException> { 
      @Override public Response toResponse(WebApplicationException weException) { 
           // grab the response from exception
           Response response = weException.getResponse(); 
           // create error object/message as you like
           CustomError error = ...; 
           // return the custom error 
           return Response.status(response.getStatus()).entity(error).build(); 
       }
  }

ExceptionMapper的更详细使用可以参考this教程。

【讨论】:

  • tks @Rishikesh Darandale 你能向我解释一下CustomError吗?我对此感到困惑。
  • @ThànhNguyễnDuy ,CustomError 将是您自己的包含错误信息的类。如果这对您没有帮助,那么您可以使用自己的实现。
  • 试过了,不知道为什么异常与mapper类不匹配
  • 您能分享您的 web.xml 或 Jersey servlet 配置吗?请分享异常映射器类的包名。
  • 我使用 Gradle,所以所有配置都是自动的,异常映射器类的名称是 javax.ws.rs。
猜你喜欢
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
相关资源
最近更新 更多