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

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)

Bar*_*art 8

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

Accept: */*

它必须设置为:

Accept: application/json

为了正常工作.