2

我对 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 映射的特定错误参数实际上并不足以编写应用程序范围的异常映射器。

4

1 回答 1

0

服务器没有响应 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-12-05T09:54:57.667 回答