CXF JAXRS - 如何POST多个参数
如何在POST请求中的请求正文中发送多个参数?CXF JAXRS - 如何POST多个参数
@POST
@Consumes("multipart/form-data")
@Produces("application/json")
public String addForm1(@FormParam("i1") Integer i1, @FormParam("i2") Integer i2);
以上代码返回HTTP 415
与@Multipart
导致Resource method has more than one parameter representing a request body
误差更换@FormParam
,如下所示。
SEVERE: Resource method service.rs.TestService.postData2 has more than one parameter representing a request body
Exception in thread "main" org.apache.cxf.jaxrs.client.ClientWebApplicationException: Resource method service.rs.TestService.postData2 has more than one parameter representing a request body
at org.apache.cxf.jaxrs.client.ClientProxyImpl.reportInvalidResourceMethod(ClientProxyImpl.java:546)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.getParametersInfo(ClientProxyImpl.java:214)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:138)
at $Proxy20.postData2(Unknown Source)
at service.TestServiceClient.main(TestServiceClient.java:82)
另外,我还需要什么才能通过多种复杂的类型,如POST方法List<Map<String, String>>' or 'List<MyNestedCustomObject>
办?我可以通过使用JAXB
并使用@XmlJavaTypeAdapter
对其进行注释来传递此参数,但是我猜这在传递多个参数的情况下不起作用?我是否会被要求定义我自己的邮件正文阅读器&作者?任何示例代码都是有用的。
感谢
不要使用@FormParam
与@Consumes
;在参数上只使用@FormParam
,CXF将找出其余的。
当我传回结果时,返回包含事物列表的单个JAXB注释的对象。 CXF内部使用Jettison,它使用这些JAXB注释来指导转换为JSON。这对我来说很好。
我想出了一个办法来做到这一点(见下面的代码)。但是,如果您知道更好的方法,那么最好不要使用“附件”的概念,而直接使用jaxrs:client而不是WebClient
,请让我知道。
服务:
@POST
@Path("/postdata3")
@Consumes("multipart/mixed")
@Produces("application/json")
public String postData3(@Multipart(value = "testItem1", type = "application/json") TestItem t1,
@Multipart(value = "testItem2", type = "application/json") TestItem t2
);
客户:
WebClient client = WebClient.create("http://myserver/services/test/postdata3");
client.type("multipart/mixed").accept("application/json");
List<Attachment> atts = new LinkedList<Attachment>();
atts.add(new Attachment("testItem1", "application/json", t1));
atts.add(new Attachment("testItem2", "application/json", t2));
javax.ws.rs.core.Response s = client.postCollection(atts, Attachment.class);
System.out.println(s.getStatus());
我可以在配置中使用Multipart吗?由于某种原因,我的服务接口和实现类无法使用Jax-rs/Cxf注释,所以我想以配置方式发布服务。但是我发现服务模型资源模式文件jaxrs-common.xsd不支持Multipart Param,并且文档没有提到,无论是在这个网页http://cxf.apache.org/docs/jax-rs-multiparts.html,有没有什么办法可以在配置中使用它?非常感谢! – Allen 2015-06-15 06:19:35
删除'@ Consumes'帮助。然而,我意识到我需要通过'@ Multipart' params,因为我的参数并不简单。我需要POST 2这些类型的参数:1. List
@domino嗯,你正在外面的地方,我知道足够直接建议。 http://cxf.apache.org/docs/jax-rs-multiparts.html表示使用'@ Multipart'或者'List'的签名。你使用什么版本的CXF? –
2012-03-09 09:21:59
因为我没有处理任何文件/附件,所以我尝试了'@ Multipart'。将检查'列表'可以有任何帮助。我使用2.5.2。在那里**有**例子,似乎表明它应该直接使用'@ Multipart'来POST多个参数。我想我错过了一些东西。 –
domino
2012-03-09 09:42:55