[ 
https://issues.apache.org/jira/browse/CAMEL-11622?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Balazs Szeti updated CAMEL-11622:
---------------------------------
    Description: 
The rest-dsl doesn't support two post() endpoints with different request body 
types.

{code:java}
restConfiguration()
  .component("servlet")
  .contextPath("/api")
  .bindingMode(RestBindingMode.json)
;

rest("/user")
  .post("/employee").type(UserPojo.class)
      .route()
      .log("Name: ${body.name}")
      .endRest()
;

rest("/country")
  .post("/origin").type(CountryPojo.class)
      .route()
      .log("Name: ${body.country}")
      .endRest()
;
{code}

Both endpoints (/api/user/employee, /api/country/origin) tries to unmarshal the 
post body to CountryPojo and a JsonProcessingException is thrown when a 
UserPojo json is sent to /user/employee.
The problem is that they share one JascksonDataFormat instance registered with 
name "json-jackson" and the RestDefinition.type() sets the 
JascksonDataFormat.unmarshalType so at the end both post() endpoints will try 
to unmarshal to the same class.

  was:
The rest-dsl doesn't support two post() endpoints with different request body 
types.

{code:java}
restConfiguration()
  .component("servlet")
  .contextPath("/api")
  .bindingMode(RestBindingMode.json)
;

rest("/user")
  .post("/").type(UserPojo.class)
      .route()
      .log("Name: ${body.name}")
      .endRest()
;

rest("/country")
  .post("/").type(CountryPojo.class)
      .route()
      .log("Name: ${body.country}")
      .endRest()
;
{code}

Both endpoints (/api/user, /api/country) tries to unmarshal the post body to 
CountryPojo and a JsonProcessingException is thrown when a UserPojo json is 
sent to /user.
The problem is that they share one JascksonDataFormat instance registered with 
name "json-jackson" and the RestDefinition.type() sets the 
JascksonDataFormat.unmarshalType so at the end both post() endpoints will try 
to unmarshal to the same class.


> Rest-dsl doesn't support post() endpoints with different request body types
> ---------------------------------------------------------------------------
>
>                 Key: CAMEL-11622
>                 URL: https://issues.apache.org/jira/browse/CAMEL-11622
>             Project: Camel
>          Issue Type: Wish
>          Components: rest
>    Affects Versions: 2.18.1
>         Environment: Spring-Boot with Tomcat8 container
>            Reporter: Balazs Szeti
>
> The rest-dsl doesn't support two post() endpoints with different request body 
> types.
> {code:java}
> restConfiguration()
>   .component("servlet")
>   .contextPath("/api")
>   .bindingMode(RestBindingMode.json)
> ;
> rest("/user")
>   .post("/employee").type(UserPojo.class)
>       .route()
>       .log("Name: ${body.name}")
>       .endRest()
> ;
> rest("/country")
>   .post("/origin").type(CountryPojo.class)
>       .route()
>       .log("Name: ${body.country}")
>       .endRest()
> ;
> {code}
> Both endpoints (/api/user/employee, /api/country/origin) tries to unmarshal 
> the post body to CountryPojo and a JsonProcessingException is thrown when a 
> UserPojo json is sent to /user/employee.
> The problem is that they share one JascksonDataFormat instance registered 
> with name "json-jackson" and the RestDefinition.type() sets the 
> JascksonDataFormat.unmarshalType so at the end both post() endpoints will try 
> to unmarshal to the same class.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to