gpt4 book ai didi

java - 映射 WebApplicationExceptions

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:00 24 4
gpt4 key购买 nike

我想知道在映射 WebApplicationExceptions 时,Javax-RS/Jersey ExceptionMapper 类的正确用途是什么

我喜欢以下简单的三状态范例:

  • HTTP 200 OK 表示响应成功,没有任何错误;和
  • HTTP 404 表示客户端错误;和
  • HTTP 500 表示服务器端错误

WebApplicationExceptions 的问题在于它们可能是客户端(403,禁止访问)或服务器端(503 Bad Gateway);因此,它们可能会根据情况映射到 404 或 500。

我正在尝试检查 WebApplicationException,以便确定它是客户端还是服务器端。

迄今为止我最好的尝试:

// Groovy pseudo-code
class MyMapper implements ExceptionMapper<Throwable> {
@Override
Response toResponse(Throwable error) {
if(error instanceof WebApplicationException) {
if(isClientSide(error as WebApplicationException)) {
// Return HTTP 404.
} else {
// Return HTTP 500.
}
} else if(error instanceof ClientException) {
// Return HTTP 404.
} else if(error instanceof ServerException) {
// Return HTTP 500.
} else {
// All other throwables. Default to HTTP 500.
}
}

private boolean isClientSide(WebApplicationException webAppExc) {
// TODO: How to make this determination?
}
}

这里有一些问题/问题:

  • 这个 ExceptionMapper 真的能捕获所有 Throwables(每个ExceptionError子类),或者只是 Throwables?和
  • 我可以在 isClientSide(...) 中做什么来确定引发的错误是客户端还是服务器端?让我们假设一个 WebApplicationException 创建的状态为 FORBIDDEN 应该被认为是“客户端”,但是一个状态为 BAD_GATEWAY 的应该被认为是“客户端”不是。

最佳答案

WebApplicationExceptionExceptionMapper 的用途相似但略有不同。

它们都帮助开发人员设置自定义 HTTP 错误代码和对特定异常发生的响应。

WebApplicationException 主要用于自定义或用户定义的异常;这意味着无论何时您的应用程序抛出用户定义的异常,您都可以设置所需的 HTTP 响应代码,并详细描述问题所在,并设置返回类型。

看起来像这样:-

public class UserDefinedExcpetion extends WebApplicationException {

/**
* Create a HTTP 404 Not Found Error as plain text
* whenever a UserDefinedExcpetion happens.
*/
public UserDefinedExcpetion (String yourMessage) {
super(Response.status(Responses.NOT_FOUND).
entity(yourMessage).type("text/plain").build());
}
}

您在应用程序中已经存在的异常(例如用户未定义的异常)上使用 ExceptionMapper ,并且在发生这些异常时您希望发送包含一些详细信息的自定义 HTTP 错误响应嵌入式;并设置消息的类型。

像这样使用它:-

   @Provider
public class IOExceptionMapper implements ExceptionMapper<java.io.IOException> {
public Response toResponse(java.io.IOException) {
/** Mapper which maps to IOExcpetion and gets called automatically by the JAXRS runtime when this exception occurs. Throw a 404 when this exception occurs.**/
return Response.status(404).entity(ex.getMessage()).type("text/plain").build();
}
}

注意:- 请注意在 jaxrs 运行时注册此映射器的 @Provider 注释。

关于java - 映射 WebApplicationExceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com