Java 如何在Camel-Rest中验证请求头

Java 如何在Camel-Rest中验证请求头,java,apache-camel,swagger-codegen,spring-camel,Java,Apache Camel,Swagger Codegen,Spring Camel,我正在尝试构建一个get请求,并且想知道如何验证传入的请求是否在请求中具有必需的头。我的代码是 rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE) .get().description("The heartbeat API").outType(Employee.class) .responseMessage().code(HttpStatus.OK.toString()).

我正在尝试构建一个get请求,并且想知道如何验证传入的请求是否在请求中具有必需的头。我的代码是

rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE)
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .to("bean:EmployeeService?method=getEmployee()");

我想要验证的管理标头是header1、header2、header3。

您可以定义Rest DSL中哪些部分是必需的,然后打开客户端请求验证,然后Camel将为您执行此操作


请参阅文档中的更多内容:

您可以定义Rest DSL中哪些部分是必需的,然后打开客户端请求验证,然后Camel将为您执行此操作


请参阅文档中的更多信息:

如文档中所述,克劳斯指的是您可以在restConfiguration上设置clientRequestValidation=true

范例

restConfiguration()
            .component("jetty")
            .host("localhost")
            .clientRequestValidation(true);

    rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE)
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .to("bean:EmployeeService?method=getEmployee()");
rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE).head()
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .route()
                .validate(header("header1").isNotNull()) // or whatever you want to validate
                .validate(header("header2").isNotNull()) // or whatever you want to validate
                .validate(header("header3").isNotNull()) // or whatever you want to validate
            .endRest()
            .to("bean:EmployeeService?method=getEmployee()");
或者,您可以在路线中进行自己的验证

范例

restConfiguration()
            .component("jetty")
            .host("localhost")
            .clientRequestValidation(true);

    rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE)
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .to("bean:EmployeeService?method=getEmployee()");
rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE).head()
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .route()
                .validate(header("header1").isNotNull()) // or whatever you want to validate
                .validate(header("header2").isNotNull()) // or whatever you want to validate
                .validate(header("header3").isNotNull()) // or whatever you want to validate
            .endRest()
            .to("bean:EmployeeService?method=getEmployee()");

如文档中所述,claus指的是您可以在restConfiguration上设置clientRequestValidation=true

范例

restConfiguration()
            .component("jetty")
            .host("localhost")
            .clientRequestValidation(true);

    rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE)
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .to("bean:EmployeeService?method=getEmployee()");
rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE).head()
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .route()
                .validate(header("header1").isNotNull()) // or whatever you want to validate
                .validate(header("header2").isNotNull()) // or whatever you want to validate
                .validate(header("header3").isNotNull()) // or whatever you want to validate
            .endRest()
            .to("bean:EmployeeService?method=getEmployee()");
或者,您可以在路线中进行自己的验证

范例

restConfiguration()
            .component("jetty")
            .host("localhost")
            .clientRequestValidation(true);

    rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE)
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .to("bean:EmployeeService?method=getEmployee()");
rest("/employee").id("get-Heartbeat").produces(JSON_MEDIA_TYPE).head()
            .get().description("The heartbeat API").outType(Employee.class)
            .responseMessage().code(HttpStatus.OK.toString()).message("Employee data").endResponseMessage()
            .param().name("header1").type(RestParamType.header).required(true).endParam()
            .param().name("header2").type(RestParamType.header).required(true).endParam()
            .param().name("header3").type(RestParamType.header).required(true).endParam()
            .route()
                .validate(header("header1").isNotNull()) // or whatever you want to validate
                .validate(header("header2").isNotNull()) // or whatever you want to validate
                .validate(header("header3").isNotNull()) // or whatever you want to validate
            .endRest()
            .to("bean:EmployeeService?method=getEmployee()");

感谢Claus的回复,我浏览了您共享的链接,它在高层进行了更多讨论,但我找不到一种方法来验证传入请求中的强制头。我还提到了camel-rest示例和camel-swagger示例,但它们都没有提到验证头的过程。你能分享做同样事情的代码吗?还有一种方法,我可以指定/发送我的openAPI yaml文档来验证请求吗?感谢Claus的回复,我通过了您共享的链接,它在高层进行了更多讨论,但我找不到一种方法来验证传入请求中的强制头。我还提到了camel-rest示例和camel-swagger示例,但它们都没有提到验证头的过程。你能分享做同样事情的代码吗?还有一种方法可以让我指定/发送我的openAPI yaml文档来验证请求吗?它对我有效,你保存了我的一天:)。现在我可以验证头了,但是路由一(即null检查)对我不起作用,即使我传递了非null header1值,我得到了空响应(而不是员工json数据)和200 OK状态。如果你想验证路由中的头并更改响应代码,你必须处理验证异常。因为这个“onException()”可以用于我,你救了我一天:)。现在我可以验证头了,但是路由一(即null检查)对我不起作用,即使我传递了非null header1值,我得到了空响应(而不是员工json数据)和200 OK状态。如果你想验证路由中的头并更改响应代码,你必须处理验证异常。对于此,可以使用“OneException()”