【问题标题】:Handling malformed @QueryParam with RESTEasy使用 RESTEasy 处理格式错误的 @QueryParam
【发布时间】:2013-12-17 08:07:44
【问题描述】:

我对使用 JBoss AS7/Wildfly 的 RESTEasy 中的异常处理或缺乏异常处理感到有些困惑。我不完全确定异常处理究竟属于哪个“域”。

这是我用来测试的:

@GET
@POST
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public Response test(@QueryParam("id") final long id) {
    log.info("Incoming request! Wee! With id " + id + "!");

    return Response.ok().build();
}

到目前为止,一切都很好。这与 localhost/app/rest/test?id=123 的行为一样。但是,当我在参数中输入不“适合”的内容时,例如 localhost/app/rest/test?id=123abc,我从 RESTEasy 收到了一个很长的异常,正确地通知我它不适合预期参数。

但我不明白如何处理/捕获此异常。显然,我不希望 40 行堆栈跟踪进入我的主(或任何)日志,而是自己进行适当的错误记录。我的研究只发现了一种处理所有 NumberFormatException 类型异常的通用方法,这完全不适合任何理智的日志记录方法。

那么,我该如何处理这个问题呢?由于这种情况发生在我的代码“外部”,因此我不能用 try/catch 将其完全包围,并且特定 REST 映射的特定错误参数实际上并不足以编写应用程序范围的异常映射器。

【问题讨论】:

  • 服务器没有响应4xx 错误吗?
  • 它没有,但我相信这确实很容易配置,所以我没有问这个问题,因为我希望我可以在没有帮助的情况下处理这部分。我只关心异常的服务器端处理。

标签: java jboss jboss7.x resteasy wildfly


【解决方案1】:

很奇怪,服务器没有响应 400 错误。如果您仍想自己处理查询参数,您可以进行过滤并检查那里的所有查询参数。 它应该是这样的:

@Provider
public class PreResourceFilter implements ContainerRequestFilter {
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {     
        MultivaluedMap<String, String> queryParams = requestContext.getUriInfo().getQueryParameters();
        // here you need to check desired parameters
    }
}

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 2012-01-23
    • 2015-04-25
    • 2020-07-01
    • 2012-06-01
    • 2012-10-29
    • 2022-06-28
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多