2014-01-06 12 views
6

Ich verwende Jersey 2.5.1 als jax-rs-Implementierung und verwende Moxy als JSON-Serialisierer. Ich habe Jersey so konfiguriert, dass Validierungsfehler ausgegeben werden, die in web.xml ausgegeben werden.Validierungsausnahme-Mapper gibt kein JSON-Format zurück

Das funktioniert gut, da Validierungsfehler im Nur-Text (Text/plain) zurückgegeben werden. Das Problem ist, dass ich Validierungsfehlermeldungen im JSON-Format und gemäß Jersey documentation erhalten möchte, um dies zu tun, muss ein JSON-Provider dafür konfiguriert werden. Soweit ich weiß, ist Moxy als JSON-Provider konfiguriert, wenn seine Abhängigkeiten an Classpath gebunden sind. Leider werden meine Validierungsfehler nicht im JSON-Format (application/json) zurückgegeben. Was kann falsch sein? Muss ich zusätzliche Bits konfigurieren?

Ps.s. wenn ich ValidationExceptionMapper Debug-Code folgende gibt Variant-Objekt mit Text Medientyp/plain

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

Was ist der Inhaltstyp Ihrer Antwort (Text/plain oder etwas anderes)? Können Sie uns Ihre Ressourcemethode zeigen, die Sie aufrufen, und was senden Sie in Accept Header von Client zu Server? –

+0

Ich fing an, nach Informationen zu suchen, die Sie verlangten, und ich bemerkte, dass ein Plugin, das ich zum Testen verwendete, keinen Header hinzufügte: Accept: application/json. Nach dem Hinzufügen bekomme ich eine Antwort im JSON-Format. – Bart

Antwort

8

Da ich nicht Rückkehr JSON-Format in dem Kommentar, der Grund erwähnt wurde aufgrund der Tatsache, dass ich Header sendete:

Accept: application/json

, um richtig funktionieren:

Accept: */*

Es muss festgelegt werden.

Verwandte Themen