我使用 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>
这工作正常,因为验证错误以纯文本(文本/纯文本)形式返回。问题是我想以 JSON 格式并根据 Jersey documentation 获取验证错误消息为此,必须为此配置一个 JSON 提供程序。据我所知,当 Moxy 的依赖项附加到类路径时,它被配置为 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()
)
);
}
最佳答案
正如我在评论中提到的,不返回 JSON 格式的原因是因为我正在发送 header :
接受: */*
它必须设置为:
接受:应用程序/json
才能正常工作。
关于json - 验证异常映射器不返回 JSON 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960685/