0

vertx-Web-api-contracts在 vertx 3.0 中使用来验证我的查询参数和表单参数

HTTPRequestValidationHandlerParameterTypeValidator

代码示例:

private final ParameterTypeValidator fileIdValueValidator = new IdTypeValidator().create();
private final ParameterTypeValidator tokenTypeValidator = new TokenTypeValidator().create();

private HTTPRequestValidationHandler getDeleteRequestValidations() {
    final HTTPRequestValidationHandler validator = HTTPRequestValidationHandler.create()
        .addQueryParamWithCustomTypeValidator(PARAM__ID, IdValueValidator, true, false)
        .addHeaderParamWithCustomTypeValidator(HEADER_TOKEN, tokenTypeValidator, true, false);
    return validator;
}

在这里,我使用 ParameterTypeValidator 提供自定义逻辑来验证我的参数值。我正在使用 customTypeValidator,因为我需要对 ex 的参数值进行自定义值验证。我需要验证我的 ID 参数应该包含由_分隔的四个部分(part1_part2_part3_part4

现在,当我尝试迁移到vertx 4.0并被vertx-Web-api-contracts弃用时,我被迫使用vertx-web-validation,但是 web-validation 缺少像 api-contract-validations 这样的 custompropertyvalidation。

我想怎么做,

private ValidationHandler getDeleteRequestValidations(final SchemaParser parser) {
    ValidationHandler validationHandler=ValidationHandler.builder(parser)
      .queryParameter(Parameters.param(PARAM__ID, stringSchema()))
      .headerParameter(Parameters.param(HEADER_TOKEN,stringSchema()))
      .build();
    return validationHandler;
  }

但我想知道如何传递/构建自定义模式,而不是使用自定义逻辑进行验证stringSchema()intSchema()早些时候我正在创建自定义类并实现 ParameterTypeValidator 以提供自定义验证逻辑(如IdTypeValidator())。

有什么方法可以通过网络验证实现相同的目标。

4

1 回答 1

0

不太熟悉新的验证机制,但会尝试帮助您使用一些事实。

新的验证使用 Json Schema,所以你应该首先去理解那个:https ://vertx.io/docs/vertx-json-schema/java/

然后,检查Parameters.param()签名,第二个参数只是一个实例,io.vertx.json.schema.common.dsl.SchemaBuilder然后描述了如何在这部分文档中构建:

https://vertx.io/docs/vertx-json-schema/java/#_building_your_schemas_from_code

我希望这会给你一个关于如何解决你的问题的方向。

于 2021-05-10T15:10:18.393 回答