Java 处理请求后参数时的奇怪行为

Java 处理请求后参数时的奇怪行为,java,web-services,rest,cxf,httprequest,Java,Web Services,Rest,Cxf,Httprequest,我正在开发一个RESTful API,使用ApacheCXF作为我的JAX-RS实现。我有一个POST端点,它应该接收带有三个参数的请求。以下是我的代码片段(已修改和缩短): 在该方法中,param2和param3都具有预期的值,但是如果我检查请求对象的参数(通过使用request.getParameterNames()),我只得到一个参数-param1,而不是全部三个参数。我确信我正在接收所有3个参数,param1作为查询参数,param2和param3作为表单参数,因为正如我刚才所说,我将它

我正在开发一个RESTful API,使用ApacheCXF作为我的JAX-RS实现。我有一个POST端点,它应该接收带有三个参数的请求。以下是我的代码片段(已修改和缩短):

在该方法中,
param2
param3
都具有预期的值,但是如果我检查请求对象的参数(通过使用
request.getParameterNames()
),我只得到一个参数-
param1
,而不是全部三个参数。我确信我正在接收所有3个参数,
param1
作为查询参数,
param2
param3
作为表单参数,因为正如我刚才所说,我将它们的值作为方法参数传递。它们似乎不存在于请求对象中

这让我非常困惑,以至于我创建了一个
过滤器
,它只做一件事,它窥视参数名称请求内部,而不做其他事情:

public class TestCXFPostParamsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain filterChain) throws IOException, ServletException {

        servletRequest.getParameterNames();

        filterChain.doFilter(servletRequest, servletResponse);
    }

    (init() and destroy() empty methods)

}
在我的web.xml文件中,我将过滤器设置为应用于端点的每个请求。现在事情变得奇怪了——出于某种原因,这使得一切都正常,我的意思是,如果我在endpoint方法中检查请求对象,它将包含所有三个预期参数。这是什么魔法

作为旁注,你们中的一些人可能想知道,当我刚刚说我可以访问由CXF的servlet传递给方法的参数值时,我为什么要检查请求对象?答案是我使用的库希望您将请求对象传递给它,而不仅仅是必要的值。所以我真的需要请求将其参数保持在内部(就像我一直假设的那样)

最后,我将使用Java6和CXF2.7.10(ApacheCammelCXF2.13.0附带)。是的,这些或多或少都是一成不变的,因为所有的意图和目的,所以如果所有这些发生的原因都是因为其中一个片段中有一个bug,那么我就不得不用一个无用的过滤器作为“解决方案”

public class TestCXFPostParamsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain filterChain) throws IOException, ServletException {

        servletRequest.getParameterNames();

        filterChain.doFilter(servletRequest, servletResponse);
    }

    (init() and destroy() empty methods)

}