使用RESTEasy处理格式错误的@QueryParam

时间:2013-12-01 16:25:39

标签: java jboss jboss7.x resteasy wildfly

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

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

1 个答案:

答案 0 :(得分: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
    }
}