For an ordering process in my REST service I have to send a list of "articles" from client to server. These article objects are of a self-made entity type. I already found out that sending a list of STRING or INTEGER objects does work, sending it via @FormParam.
But as soon as I try to send a list of my own objects (even only ONE object), I always get a HTTP 400 error "Bad Request".
I tried excatly the same code like below (only the parameters of form.add() and the parameters of the server method were altered) and postet Strings, Integers and lists of Strings successfully. It only makes problems sending own object types.
Logging told me that the server method isn't reached. The process is broken somewhere before.
I also tried to get the request by using a proxy (Apache JMeter). Here it says that the parameter kunde
contains the value entities.Kunde%40af8358
. So I guess the object is not serialized thoroughly (or at all). But sending this kind of object from server to client in a response works fine - here the XML-serialization is no problem.
What might be the reason? Is it maybe NOT possible to send own types through POST?
(PS: The type Kunde
in my example is serializable and annotated with @XmlRootElement
.)
Thank you in advance for your help!
Jana
Note: I'm using the SAP Netweaver AS. But until now it behaved like every other Java AS, so I don't think this will be the reason. Every other REST operation does work, even POST without own entities.
Addition: I'm using the JERSEY library.
My Code on server side:
@Path("/test")
@POST
@Produces(MediaType.TEXT_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String test(
@FormParam("kunde") Kunde kunde) {
return "The name of the customer is: "
+kunde.getVorname()+" "+kunde.getNachname();
}
My code on client side (the method is in a Session Bean):
public String test() {
Kunde kunde = new Kunde();
kunde.setNachname("Müller");
kunde.setVorname("Kurt");
Form form = new Form();
form.add("kunde", kunde);
return service
.path("test")
.type(MediaType.APPLICATION_FORM_URLENCODED)
.accept(MediaType.TEXT_XML)
.post(String.class, form);
}
where service is built like that:
com.sun.jersey.api.client.Client;
com.sun.jersey.api.client.WebResource;
com.sun.jersey.api.client.config.ClientConfig;
com.sun.jersey.api.client.config.DefaultClientConfig;
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
service = client.resource(UriBuilder.fromUri("<service-url>").build());