From: Bill B. <bb...@re...> - 2012-08-29 13:24:52
|
On 7/5/2012 6:50 PM, Cody Lerum wrote: > I'm currently using the @Form functionality to handle the > unmarshalling of form data sent via a cross-domain ajax post > > @Path("/add") > @POST > @Produces("application/json") > @Consumes("application/x-www-form-urlencoded") > public Response add(@Form MyForm form) { ... } > > This works great except for when coming from Internet Explorer which > has to be a XDomainRequest and that only supports sending with > content-type text/plain. > > I can obviously create another method to handle this request which is > receiving valid form data just with the wrong content-type > > @Path("/add") > @POST > @Produces("application/json") > @Consumes("text/plain") > public Response add(String data) { ... } > > However at this point I have to manually parse the data and set it > field by field into my object. > > 1. Is there anyway to force the first method to process the the > request data regardless of the received content-type? > > 2. If that isn't possible, is there a way I can manually call an > internal RESTeasy function to map the String data from my second > method to a specified class with @FormParam variables. > You can't really re-use public Response add(@Form MyForm form) method. There's a couple things you could do. You could inject a Providers reference and change the media type: @POST @Consumes("text/plain") public Response add(@Context Providers providers, InputStream content) { MessageBodyReader reader = providers.getMessageBodyReader(MultivaluedMap.class, null, null, new MediaType("application/x-www-form-urlencoded"); MultivaluedMap<String, String> formParams = reader.readFrom(...); ... } You could also write a specific MessageBodyReader for your MyForm class for text/plain formats. Bill -- Bill Burke JBoss, a division of Red Hat http://bill.burkecentral.com |