Как использовать контекстный путь в верблюжьих маршрутах?

#java #spring-boot #routes #apache-camel #spring-camel

#java #пружинный ботинок #маршруты #apache-camel #spring-верблюд

Вопрос:

я новичок в camel. я делаю проект в spring-boot, используя camel для маршрутов. Я заметил, что когда я захожу в SwaggerUI, чтобы увидеть правильное функционирование моих вызовов Post, ContextPath маршрутов не работает:

 public void configure() {

        restConfiguration().component("servlet").contextPath("service/");

        rest("/ocs")
            .post("/homologation")
                .id(camelRoutesIdConfig.getHomologationRequestRouteId())
                .consumes("application/json")
                .produces("application/json")
                .param()
                    .name("IntegrationRequestDto")
                    .type(RestParamType.body)
                    .required(true)
                    .description("attivazione nuovo contratto sul portale")
                .endParam()
                .to("direct:homologation")

}
 

Эта проблема не возникает, если в приложении.yml Я указываю ContextPath следующим образом:

 camel:
  rest:
    component: servlet
    binding-mode: json
    enable-cors: true
    data-format-property:
      prettyPrint: false
     component:
    servlet:
      mapping:
        context-path: /service/*
 

Когда я делаю свой вызов Post в одном случае, он работает, в то время как в случае ContextPath в маршрутах он не распознает команду и выдает

 {
  "timestamp": "2020-11-22T17:44:26.701 0000",
  "status": 404,
  "error": "Not Found",
  "message": "Not Found",
  "path": "/service/ocs/homologation"
}
 

Почему существует эта проблема? Почему я вынужден также указывать в приложении.yml вместо того, чтобы использовать его только один раз в маршрутах? Спасибо всем за возможный ответ

Ответ №1:

Правильно, что это работает так. конфигурация ContextPath в RestConfiguration предназначена для чистой документации XML-API. Чтобы активировать ContextPath в ваших вызовах Get, Post, Put … вам нужно указать его в application.properties. Документация Apache Camel по использованию сервлета может вам помочь

Ответ №2:

добавьте конфигурацию свойств в application.properties :

camel.component.servlet.mapping.context-path=/верблюд-отдых-пример/*

а затем вызовите

http://localhost:8080/camel-rest-example /${ваш-ресурс-здесь}

Ответ №3:

Для тех, кто сталкивается с этим сообщением. В моем случае (3.11.6) свойство было:

application.properties

 camel.servlet.mapping.context-path=/myservice/api/v1/*
 

application.yml

 camel:
  servlet:
    mapping:
      context-path: /services/api/v1/*