我使用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>
这可以正常工作,因为验证错误以纯文本(text / plain)返回。问题是我想以JSON格式获取验证错误消息,并且根据Jersey documentation为了做到这一点,必须为此配置JSON提供程序。据我所知,当Moxy的依赖关系附加到classpath时,它被配置为JSON提供者。不幸的是,我的验证错误不会以JSON(application / json)格式返回。什么可能是错的。我是否必须配置额外的位?
P.S。 当我调试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()
)
);
}
答案 0 :(得分:8)
正如我在评论中提到的那样,不返回JSON格式的原因是因为我发送了标题:
Accept: */*
必须设置为:
Accept: application/json
为了正常工作。