我在以下链接后开发了一个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参数的任何想法吗?
答案 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
希望能帮助别人!