gpt4 book ai didi

java - Dropwizard protobuf 验证

转载 作者:行者123 更新时间:2023-12-05 07:47:42 28 4
gpt4 key购买 nike

我正在使用 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;
}

最佳答案

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

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

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

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

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

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

关于java - Dropwizard protobuf 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39429199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com