6
我使用Jersey 2.5.1作爲jax-rs實現,並將Moxy用作JSON序列化程序。我將Jersey配置爲打印驗證錯誤以在web.xml中輸出。驗證異常映射器不返回JSON格式
<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下面的代碼返回介質類型文本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()
)
);
}
你的回覆的內容類型是什麼(文本/純文本或其他)?你能向我們展示你正在調用的資源方法嗎?你在接受從客戶端到服務器的頭文件時發送了什麼? –
我開始抓取您要求的信息,並且我注意到我用於測試的插件沒有添加標頭:Accept:application/json。添加它後,我得到了JSON格式的響應。 – Bart