【问题标题】:CXF RestFul Service - Get Post Body ParametersCXF RestFul Service - 获取帖子正文参数
【发布时间】:2015-05-10 13:37:03
【问题描述】:

我已经按照以下链接开发了一个网络服务,但是我无法从 POST 请求正文中获取请求参数。

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

我使用 Soap UI 来调用 服务,选中“在消息正文中发布 QueryString”选项。 到目前为止,我已经尝试了以下选项,但似乎都不起作用:

  • 试过多值映射,但映射总是空的。

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

  • 尝试使用 @XmlRootElement 注释创建一个 POJO bean,但是这次我得到一个异常说 "SEVERE: No message body reader has found for class com.wcc.LoginInfo, ContentType : 应用程序/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 参数有什么想法吗?

【问题讨论】:

  • 我也有同样的问题..你找到什么了吗?

标签: web-services cxf jax-rs


【解决方案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

希望对某人有所帮助!

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2018-11-07
    • 2021-07-28
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多