Camel REST — передача параметров множественного запроса DSL с нулевыми значениями, дающими ошибку

#spring-boot #apache-camel #swagger #dsl

#spring-boot #apache-camel #развязность #dsl

Вопрос:

Я создал Camel Rest-DSL в проекте spring-boot.Теперь, во время реализации swagger, когда я передаю параметр множественного запроса с обязательными и необязательными полями, он не фиксирует значение null в необязательных полях.

Мой пример кода выглядит примерно так :

================ маршрутизатор открытого класса расширяет RouteBuilder {

 @Override 


public void configure() throws Exception,PredicateValidationException {

    JsonDataFormat json = new JsonDataFormat(JsonLibrary.Jackson);
    Exchange exchnage;

    CamelContext context = new DefaultCamelContext();

    restConfiguration()
        .component("servlet")
        .apiContextPath("/api-docs")
        .contextPath("/swagger")
        .apiProperty("api.title", "Sample Services")
        .apiProperty("api.version", "v1");

        interceptFrom().to("log:received");

        rest().get("/getAppStatus?MainID={MainID}amp;MainID2={MainID2}amp;MainID3={MainID3}amp;MainID4={MainID4}").produces("application/json").param().name("Consumer").type(RestParamType.header).endParam()
            .param().name("UserRefId").type(RestParamType.header).endParam()
            .param().name("ConRefId").type(RestParamType.header).endParam()
            .param().name("MainID").type(RestParamType.query).endParam()
            .param().name("MainID2").type(RestParamType.query).required(false).endParam()
            .param().name("MainID3").type(RestParamType.query).required(false).endParam()
            .param().name("MainID4").type(RestParamType.query).required(false).endParam()
            .description("Get Application Status")
            .to("direct:getAppStatus");

        from("direct:getAppStatus").bean(idGen)
            .log("body before is : ${body}")
            .setHeader("operationName",constant("getAppStatus"))
            .process(new GetRequestProcessor())
            .setHeader("Content-Type", constant("{{route.ContentType}}"))
            .setHeader("SOAPAction", constant("{{route.getAppStatus}}"))
            .log("body after is : ${body}")
            .setHeader("opName",constant("getAppStatus"))
            .to("{{route.sampleURL}}")
            .process(new GetApplicationStatusResponseProcessor()).end();


}
  

}

==================== Здесь : UserRefId и ConRefId, используемые в качестве средств проверки запроса.

Параметр запроса MainID является обязательным, а MainID2, MainID3, MainID4 — это поля, которые могут содержать нулевые значения.

Пример ссылки :

Link1 = http://localhost:8080/swagger/getAppStatus ?MainID=12345amp;MainID2=amp;MainID3=amp;MainID4=

Но когда он запускается через пользовательский интерфейс swagger, в CURL он показывает :

Ссылка 2 = http://localhost:8080/swagger/getAppStatus ?MainID2=%MainID2} amp; MainID3=%MainID3} amp; MainID4=%MainID4}amp;MainID= 12345

Проблема сохраняется только тогда, когда вступило в действие необязательное поле.

Присутствует ли какой-либо параметр, который позволит вставлять нулевые значения в соответствии с требуемым форматом [Link1], а не как ссылка на ошибку [Link2]?

Комментарии:

1. Вы не можете сделать это для параметров запроса в rest-dsl со {xxx} стилем, который предназначен только для content-path. Так что просто удалите все это после ? метки, и это должно сработать.

2. Спасибо, Клаус Ибсен, я только пытался удалить «{}» из некоторых параметров запроса, и они не работали. Теперь, согласно вашей рекомендации, я удалил все, что «{}» после «?», и это работает 🙂 Текущая ссылка выглядит так: localhost:8080 / swagger/… где 12345 — это «MainID», который является обязательным полем.