2016-11-24 1 views
1

Der offizielle JSON-Medientyp ist application/json. Der Resteasy Anbieter für Jackson, ResteasyJackson2Provider, gibt die Medientypen wie folgt aus:Korrekter JAX-RS-Medientyp passend für JSON-Provider

@Provider 
@Consumes({"application/*+json", "text/json"}) 
@Produces({"application/*+json", "text/json"}) 
public class ResteasyJackson2Provider extends JacksonJaxbJsonProvider 
… 

Ich verstehe es nicht. Ich verstehe, dass "application/*+json" würde übereinstimmen z.B. application/foo+json. Aber würde es application/json ohne das Pluszeichen + entsprechen? Ist das in der JAX-RS-Spezifikation? Es stimmt nicht damit überein, wie ein Platzhalter funktionieren soll, es sei denn, der JAX-RS-Medientyp-Mustervergleich hat ein gewisses Verständnis für die Semantik der Teilkomponenten von Medientypen.

+1

Ich konnte nichts finden in [JAX-RS-Spezifikation] (http://download.oracle.com/otndocs/jcp/jaxrs-2_0-fr-eval-spec/index.html) (Untertypen sind concret oder Platzhalter, keine Kombination) und ['MediaType # isCompatible'] (https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/MediaType.html#isCompatible-javax.ws.rs .core.MediaType-) kann damit nicht umgehen. 'application/* + json' scheint falsch zu sein oder eine Vendor-Funktion von RestEasy. – dur

+1

Ja, dieses spezielle von RESTASY. Und "application/json" passt zu "application/* + json". Siehe [MediaTypeMap.SubTypeMap.getPossible] (https://github.com/resteasy/Resteasy/blob/c68a7a679e0bc872e48da75eb357f6246df10ec7/restasy-jaxrs/src/main/java/org/jboss/restasy/core/MediaTypeMap.java#L227) – CyberWasp

+1

Aber ist es ein Standardteil von JAX-RS? Würde ich erwarten, dass dies mit anderen JAX-RS-Implementierungen funktioniert? Bitte geben Sie eine separate Antwort an, damit ich sie als korrekt kennzeichnen kann, wenn Sie eine Referenz angeben. Vielen Dank. –

Antwort

0

In der JAX-RS-Spezifikation gibt es keine Angaben zum Medientyp-Suffix. Jeder Anbieter verarbeitet das Suffix so, wie es ist.

ich Hoden meinen benutzerdefinierten Provider (produziert application/*+json-Medien) mit 3 JAX-RS-Implementierungen:

  • Jersey (mit Jettison JSON-Provider) - nicht Prozess-Service produziert application/json Medientyp
  • Resteasy (interne JSON Provider) - Service-Prozess produziert application/json Medienart
  • Apache CFX (internal JSON Provider) - Service-Prozess produziert application/json Medientyp (wenn PARTIAL_HIERARCHICAL_MEDIA_SUBTYPE_CHECK Eigenschaft ist true)

Mein recommdenation - traue *+json Typ Medien, wenn Sie verschiedene JAX-RS-Implementierungen verwenden möchten. Fügen Sie explizit application/json hinzu.