2014-01-06 36 views
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() 
        ) 
      ); 
     } 
+0

你的回覆的內容類型是什麼(文本/純文本或其他)?你能向我們展示你正在調用的資源方法嗎?你在接受從客戶端到服務器的頭文件時發送了什麼? –

+0

我開始抓取您要求的信息,並且我注意到我用於測試的插件沒有添加標頭:Accept:application/json。添加它後,我得到了JSON格式的響應。 – Bart

回答

8

正如我在註釋中不返回JSON格式是由於這樣的事實,我會發送標題的原因:

爲了正常工作

Accept: application/json

Accept: */*

必須設置爲。