[
https://issues.apache.org/jira/browse/CXF-8314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andriy Redko resolved CXF-8314.
-------------------------------
Resolution: Information Provided
> Consumes Multiple Heterogeneous Media Types with Resource Method Paramters
> --------------------------------------------------------------------------
>
> Key: CXF-8314
> URL: https://issues.apache.org/jira/browse/CXF-8314
> Project: CXF
> Issue Type: New Feature
> Components: JAX-RS
> Reporter: Kevin Zheng
> Priority: Minor
>
> Hi, I got a use case that we were trying to employ one API to support request
> with either JSON or FORM media type. On the server side, we don't want to
> manually populate the name/key-value pairs with MessageContext. Instead we'd
> like to deserialize the request body to the resource method parameter by CXF
> itself.
> Something unexpected happened when I was using MultivalueMap to consume body
> in JSON or using POJO to consume body in Form. Please refer to the following.
> ######First trial: resource method parameter type is MultivaluedMap######
> @POST
> @Consumes({MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON})
> @Produces(MediaType.APPLICATION_JSON)
> public void authorize(MultivaluedMap<String, String> parameter) { }
> ######First trial: resource method parameter type is MultivaluedMap######
> ######Secon trial: resource method parameter type is POJO######
> @POST
> @Consumes({MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON})
> @Produces(MediaType.APPLICATION_JSON)
> public void authorize(TestPojo pojo) { }
> ######Secon trial: resource method parameter type is POJO######
> ######################request with json begin######################
> Address: http://localhost:5759/gw/v1/test
> Encoding: UTF-8
> Http-Method: POST
> Content-Type: application/json; charset=UTF-8
> Headers: {Accept=[*/*], accept-encoding=[gzip,deflate],
> connection=[keep-alive], Content-Length=[15], content-type=[application/json;
> charset=UTF-8], Host=[localhost:5759], User-Agent=[Apache-HttpClient/4.5.2
> (Java/1.8.0_201)]}
> Payload: {"data":"xxxx"}
> ######################request with json end######################
> ######################request with form begin######################
> Address: http://localhost:3471/gw/v1/test?data=yyyy
> Encoding: ISO-8859-1
> Http-Method: POST
> Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
> Headers: {Accept=[*/*], accept-encoding=[gzip,deflate],
> connection=[keep-alive], Content-Length=[0],
> content-type=[application/x-www-form-urlencoded; charset=ISO-8859-1],
> Host=[localhost:3471], User-Agent=[Apache-HttpClient/4.5.2 (Java/1.8.0_201)]}
> ######################request with json begin######################
> ######################jax-rs configuration######################
> <jaxrs:server id="serviceContainer" address="/">
> <jaxrs:serviceBeans>
> <ref bean="testService"/>
> </jaxrs:serviceBeans>
> <jaxrs:providers>
> <bean
> class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
> </jaxrs:providers>
> </jaxrs:server>
> <bean id="testService" class="com.service.testServiceImpl"/>
> ######################jax-rs configuration######################
--
This message was sent by Atlassian Jira
(v8.3.4#803005)