【问题标题】:Dropwizard protobuf validationDropwizard protobuf 验证
【发布时间】:2016-09-16 22:58:38
【问题描述】:

我正在使用 dropwizard 并且有一个支持 json 和 protobuf 的服务。我真的很喜欢我的请求类中的字段上的@Valid 表示法和注释。问题是@Valid 符号只适用于 json 而不是 protobuf。无论媒体类型如何,有没有一种方法或一种好方法可以让 @Valid 注释工作?

示例服务:

@POST
@Produces({
        MediaType.APPLICATION_JSON, "application/x-protobuf"
})
@Consumes({
        MediaType.APPLICATION_JSON, "application/x-protobuf"
})
@Path("/foo")
void foo(@Valid Request request);

public class Request
{
  @NotBlank(message = "Missing info")
  String field;
}

【问题讨论】:

    标签: java jersey dropwizard


    【解决方案1】:

    Dropwizard 1.0.0 版之前的验证是在 JacksonMessageBodyProvider 类中完成的,该类本质上是 MessageBodyReader(负责反序列化 POJO 的类)。

    正如课程中的名称 Jackson 所描述的,此功能可能仅适用于基于 JSON 的实体。

    话虽如此,唯一的选择是通过编写这段代码在资源方法中自己执行验证,

    Validator validator = environment.getValidator();
    Set<ConstraintViolation<T>> violations = validator.validate(object, validationGroups);
    

    迭代违规集,识别请求POJO中的所有违规,当你返回HTTP 4xx错误响应时,可以在payload中发送出去。

    从 1.0.0 开始,在 Github 上使用 Pull Request。将验证逻辑从 Jackson 移到 Jersey 实质上应该允许其他实体类型使用该功能。 DropwizardConfiguredValidator 实现在 Jersey 中注册为 ConfiguredValidator,它执行所需的验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多