如何使用Camel Rest DSL支持媒体类型版本控制

如何使用Camel Rest DSL支持媒体类型版本控制,rest,apache-camel,Rest,Apache Camel,我正在寻找一种解决方案,在使用媒体类型版本控制对我的RESTAPI进行版本控制时使用驼峰Rest DSL。请参阅,以了解有关我试图完成的任务的详细信息 例如,如果我有一个存储对象的两个版本(V1_0和V2_0) 请注意,我在“consumes”/“Products”中指定了多种媒体类型。但是,我仅限于“type”/“outType”中的单个类 如果我尝试多行“post('/'),我会收到一个“restdsl中检测到重复动词”错误。有没有办法将媒体类型绑定到POJO 欢迎就如何使用媒体类型处理RE

我正在寻找一种解决方案,在使用媒体类型版本控制对我的RESTAPI进行版本控制时使用驼峰Rest DSL。请参阅,以了解有关我试图完成的任务的详细信息

例如,如果我有一个存储对象的两个版本(V1_0和V2_0)

请注意,我在“consumes”/“Products”中指定了多种媒体类型。但是,我仅限于“type”/“outType”中的单个类

如果我尝试多行“post('/'),我会收到一个“restdsl中检测到重复动词”错误。有没有办法将媒体类型绑定到POJO

欢迎就如何使用媒体类型处理RESTAPI版本控制提出任何建议


编辑:我还试图生成用于摇摇的规范,并且希望能够根据所选内容类型在“摇篮”UI中看到其他“示例值”。

<代码>消耗,
生成
类型
outType
仅用于生成摇摇器规范。您可以接受/取消映射,在rest定义中的
route()
指令之后,处理并封送回所需的任何格式:

诸如此类:

.post('/').description('Create a new store')
    .param().name('body').type(body).description('The store to create').endParam()
    .route()
        .to('log:com.acme.api.store?level=INFO&showHeaders=true')
        .choice()
          .when(header(Exchange.CONTENT_TYPE).isEqualTo("application/x.canopy.store+json; version=1.0"))
            .unmarshal(Store_V1_0)
            .process(v1Processor)
          .when(header(Exchange.CONTENT_TYPE).isEqualTo("application/x.canopy.store+json; version=1.2"))
            .unmarshal(Store_V2_0)
            .process(v2Processor)
        .end()
        .process(doSomethingElse)
        .marshal().json()
    .endRest()

我将修改我的问题,因为我应该包括我也在尝试为招摇UI生成规范。我希望能够在基于所选内容类型的Swagger UI中看到不同的“示例值”。你确实帮了我解决了部分问题。任何额外的帮助都将不胜感激!看来我应该更仔细地阅读《大摇大摆2.0规范》。我试图实现的目标还没有得到支持,但似乎在2.1中会得到支持。我会接受斯特雷洛克的回答。
.post('/').description('Create a new store')
    .param().name('body').type(body).description('The store to create').endParam()
    .route()
        .to('log:com.acme.api.store?level=INFO&showHeaders=true')
        .choice()
          .when(header(Exchange.CONTENT_TYPE).isEqualTo("application/x.canopy.store+json; version=1.0"))
            .unmarshal(Store_V1_0)
            .process(v1Processor)
          .when(header(Exchange.CONTENT_TYPE).isEqualTo("application/x.canopy.store+json; version=1.2"))
            .unmarshal(Store_V2_0)
            .process(v2Processor)
        .end()
        .process(doSomethingElse)
        .marshal().json()
    .endRest()