CXF RestFul服务 - 获取帖子身体参数

时间:2015-03-09 11:49:23

标签: web-services cxf jax-rs

我在以下链接后开发了一个web服务,但是我无法从POST请求主体获取请求参数。

http://info.appdirect.com/blog/how-to-easily-build-rest-web-services-with-java-spring-and-apache-cxf

我使用Soap UI来调用 服务,"邮件正文中的Post QueryString"选项已选中。 到目前为止,我已经尝试过以下选项,但似乎没有选择:

  • 尝试多值地图,但地图始终为空。

    @POST
    @Path("/getpostfile/{fileName}")
    @Produces("application/pdf")
    @Consumes("application/x-www-form-urlencoded")
    public Response getPostFile(MultivaluedMap form){...}
    
  • 尝试 @FormParam()& @QueryParam ,但在webservice方法中,params仍然为null。

  • 尝试使用 @XmlRootElement 注释创建一个POJO bean,但是这次我得到一个例外,说明" SEVERE:没有找到类com的消息正文阅读器.wcc.LoginInfo,ContentType:application / x-www-form-urlencoded" 。 LoginInfo是我的bean类,有两个参数:

    @XmlRootElement
    public class LoginInfo {
        String username;
        String password;
        ....
    

以下是服务方法:

    @POST
    @Path("/getpostfile/{fileName}")
    @Produces("application/pdf")
    @Consumes("application/x-www-form-urlencoded")
    public Response getPostFile(LoginInfo logininfo){...}

下面是我的cxf-beans.xml文件:

    <bean .....>
    <jaxrs:server id="wccservice" address="/">
       <jaxrs:serviceBeans>
           <ref bean="wccdocumentservice" />
       </jaxrs:serviceBeans>
       <jaxrs:providers>
            <ref bean="formUrlEncodeProvider" />
       </jaxrs:providers>
 </jaxrs:server>


 <bean id="wccdocumentservice" class="com.wcc.WCCDocumentServiceImpl" />
 <bean id="formUrlEncodeProvider" class="org.apache.cxf.jaxrs.provider.FormEncodingProvider" />
 <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
    <property name="marshallAsJaxbElement" value="true" />
 </bean>

有关如何在Webservice方法中检索请求正文中的POST参数的任何想法吗?

1 个答案:

答案 0 :(得分:1)

猜猜我在CXF上花了太多时间,错过了简单的方法。我们可以在CXF服务中获取Post请求参数,类似于我们在Servlet中获取参数的方式。

对于POST请求中的查询参数:

    @POST
    @Path("/getpostfile/{fileName}")
    @Produces("application/pdf")
    @Consumes("application/x-www-form-urlencoded")
    public Response getPostFile(@PathParam("fileName") String fileName, @Context HttpServletRequest request) 
    {
     System.out.println("id is : " + request.getParameter("id")+", password is : " + request.getParameter("password"));

对于POST邮件正文中的参数,您可以使用以下链接中的 getBody()方法:

Getting request payload from POST request in Java servlet

希望能帮助别人!