Jak wysłać więcej niż jeden parametr w treści żądania w żądaniu POST?CXF JAXRS - jak POST więcej niż jeden parametr
@POST
@Consumes("multipart/form-data")
@Produces("application/json")
public String addForm1(@FormParam("i1") Integer i1, @FormParam("i2") Integer i2);
Powyższy kod zwraca HTTP 415.
Wymiana @FormParam
z @Multipart
skutkuje Resource method has more than one parameter representing a request body
błędu, jak pokazano poniżej.
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)
Ponadto, co muszę zrobić, aby przekazać wiele złożonych typów, takich jak List<Map<String, String>>' or 'List<MyNestedCustomObject>
w metodzie POST? Jestem w stanie przekazać taki parametr za pomocą JAXB
i opisać go za pomocą @XmlJavaTypeAdapter
, ale myślę, że to nie działa w przypadku przekazywania wielu parametrów? Czy zostałbym zobowiązany do zdefiniowania własnych pisarzy treści wiadomości: &? Przydałby się przykładowy kod.
Dzięki
Usuwanie '@ Consumes' pomogło. Jednak zdałem sobie sprawę, że muszę przekazać parametry '@ Multipart', ponieważ moje parametry nie są proste. Muszę POST 2 params tych typów: 1. Lista> 'i 2.' MyCustomObject'. Przekazanie 1 takiego parametru działa dobrze (zdefiniowałem 'XmlJavaTypeAdapter' dla' Map 'i opisałem' MyCustomObject' za pomocą '@ XmlRootElement'). Ale kiedy przekazuję oba parametry, to wyrzuca 'ma więcej niż jeden parametr reprezentujący błąd żądania. Próbowałem 'multipart/mixed' &' multipart/related' dla '@ Consumes' i oznaczono parametrami' @ Multipart'. Doceń szybką pomoc. –
domino
@domino Hmm, wychodzisz poza obszar, który znam na tyle dobrze, aby doradzić bezpośrednio. http://cxf.apache.org/docs/jax-rs-multiparts.html mówi, aby użyć '@ Multipart' _lub podpisu' List '. Jakiej wersji CXF używasz? –
Ponieważ nie mam do czynienia z plikami/załącznikami jako takimi, wypróbowałem '@ Multipart'. Sprawdza, czy 'List' może być jakiejkolwiek pomocy. Używam wersji 2.5.2. Tam ** są ** przykłady na tej stronie, które wydają się sugerować, że powinno być proste przejście do POST wielu parametrów przy użyciu '@ Multipart'. Chyba czegoś brakuje. –
domino