代码之家  ›  专栏  ›  技术社区  ›  Ermintar

camel rest DSL所需参数被忽略

  •  1
  • Ermintar  · 技术社区  · 7 年前

    我有一个RESTAPI,用camel rest DSL创建。还有一个REST,它使用带有参数列表的GET,其中一些参数是必需的。

    路由配置:

        rest().get("/{{camel.rest.version}}/myget")
                .param()
                    .name("accountNumber")
                    .dataType("string")
                    .type(RestParamType.query)
                    .required(true)
                .endParam()
                .param()
                    .name("someId")
                    .dataType("string")
                    .type(RestParamType.query)
                    .required(false)
                .endParam()
                .produces(REST_PR_CN_TYPE)
                .responseMessage().code("200").message("OK").endResponseMessage()
                .responseMessage().code("500").endResponseMessage()
                .route().routeId("rst_cardsInfo")
                .log(LoggingLevel.INFO, "ApiRq Recieved http request")
                .log(LoggingLevel.DEBUG, "AccountNumber: ${header.accountNumber}, SomeId: ${header.someId}")
                .id("rst_rst_info_recieved")
                .to("direct:drt_rst_info")
                .endRest();
    

    当我打开Swagger UI生成的页面时,我的API看起来很好。参数accountnumber标记为必需,someid-不需要。

    使用任何其他工具,我可以发送一个没有任何参数的请求,并接收HTTP.200作为响应。我希望,如果需要参数,但请求中不存在,那么请求将失败。例如,Spring Rest确保所有必需的参数都存在。

    在camel中是否有任何强制参数存在验证?我可能配置错误了吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Claus Ibsen    7 年前

    啊,好吧。现在剩下的DSL中没有/只有一点点验证。它依赖于所选的HTTP组件(servlet、restlet、undertow等)来实现这一点。

    但坦率地说,如果您的示例中指定了选项,我们可以改进这一点,并让camel core进行一些预验证。

    我记录了一张票: https://issues.apache.org/jira/browse/CAMEL-12533