验证异常映射器不返回JSON格式

时间:2014-01-06 22:42:19

标签: json validation jersey jax-rs 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>

这可以正常工作,因为验证错误以纯文本(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()
                    )
            );
        }

1 个答案:

答案 0 :(得分:8)

正如我在评论中提到的那样,不返回JSON格式的原因是因为我发送了标题:

Accept: */*

必须设置为:

Accept: application/json

为了正常工作。