Bar*_*art 6 validation json jax-rs jersey moxy
我使用Jersey 2.5.1作为jax-rs实现,我使用Moxy作为JSON序列化器.我将Jersey配置为打印验证错误以在web.xml中输出.
<init-param>
<param-name>jersey.config.beanValidation.enableOutputValidationErrorEntity.server</param-name>
<param-value>true</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
这是正常的,因为验证错误以纯文本(text/plain)返回.问题是我想获得JSON格式的验证错误消息,并且根据Jersey文档为了做到这一点,必须为此配置JSON提供程序.据我所知,当Moxy的依赖关系附加到classpath时,它被配置为JSON提供者.不幸的是,我的验证错误不会以JSON(application/json)格式返回.什么可能是错的.我必须配置额外的位吗?
当我调试ValidationExceptionMapper后面的代码返回带有媒体类型text/plain的Variant对象
if (property != null && Boolean.valueOf(property.toString())) {
final List<Variant> variants = Variant.mediaTypes(
MediaType.TEXT_PLAIN_TYPE,
MediaType.TEXT_HTML_TYPE,
MediaType.APPLICATION_XML_TYPE,
MediaType.APPLICATION_JSON_TYPE).build();
final Variant variant = request.get().selectVariant(variants);
if (variant != null) {
response.type(variant.getMediaType());
} else {
// default media type which will be used only when none media type from {@value variants} is in accept
// header of original request.
// could be settable by configuration property.
response.type(MediaType.TEXT_PLAIN_TYPE);
}
response.entity(
new GenericEntity<List<ValidationError>>(
ValidationHelper.constraintViolationToValidationErrors(cve),
new GenericType<List<ValidationError>>() {}.getType()
)
);
}
Run Code Online (Sandbox Code Playgroud)
正如我在评论中提到的那样,不返回JSON格式的原因是由于我正在发送标题:
Accept: */*
它必须设置为:
Accept: application/json
为了正常工作.