对于使用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类型的所有Exception的通用方法,这完全不适合任何理智的日志记录方法。

那么,我该如何处理呢?当这种情况发生在我的代码“外部”时,我无法用try / catch完全包围它,并且特定REST映射的特定错误参数实际上不足以编写应用程序范围的Exception映射器。

最佳答案

服务器没有响应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
    }
}

10-05 22:48
查看更多