Dropwizard protobuf 验证
Dropwizard protobuf validation
我正在使用 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;
}
Dropwizard 1.0.0 之前的验证是在 JacksonMessageBodyProvider
class 中完成的,它本质上是一个 MessageBodyReader
(class 负责反序列化您的 POJO)。
正如 class 中的名字 Jackson 所描述的那样,此功能可能只适用于基于 JSON 的实体。
话虽如此,唯一的选择是通过编写这段代码在资源方法中自己执行验证,
Validator validator = environment.getValidator();
Set<ConstraintViolation<T>> violations = validator.validate(object, validationGroups);
迭代违规设置以识别请求 POJO 中的所有违规,当您 return HTTP 4xx 错误响应时,可以在有效负载中将其发送出去。
从 1.0.0 开始,在 Github 上按此 Pull Request 进行。将验证逻辑从 Jackson 移到 Jersey 应该基本上允许其他实体类型使用该功能。 DropwizardConfiguredValidator
实现在执行所需验证的 Jersey 中注册为 ConfiguredValidator
。
我正在使用 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;
}
Dropwizard 1.0.0 之前的验证是在 JacksonMessageBodyProvider
class 中完成的,它本质上是一个 MessageBodyReader
(class 负责反序列化您的 POJO)。
正如 class 中的名字 Jackson 所描述的那样,此功能可能只适用于基于 JSON 的实体。
话虽如此,唯一的选择是通过编写这段代码在资源方法中自己执行验证,
Validator validator = environment.getValidator();
Set<ConstraintViolation<T>> violations = validator.validate(object, validationGroups);
迭代违规设置以识别请求 POJO 中的所有违规,当您 return HTTP 4xx 错误响应时,可以在有效负载中将其发送出去。
从 1.0.0 开始,在 Github 上按此 Pull Request 进行。将验证逻辑从 Jackson 移到 Jersey 应该基本上允许其他实体类型使用该功能。 DropwizardConfiguredValidator
实现在执行所需验证的 Jersey 中注册为 ConfiguredValidator
。