2016-11-24 1 views
1

Le type de média JSON officiel est application/json. Le fournisseur de RESTEasy pour Jackson, ResteasyJackson2Provider, précise les types de médias comme ceci:Corriger le type de média JAX-RS correspondant pour le fournisseur JSON

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

Je ne comprends pas. Je comprends que "application/*+json" correspondrait par ex. application/foo+json. Mais cela correspondrait-il à application/json sans le signe plus +? Est-ce dans la spécification JAX-RS? Cela ne coïncide pas avec la façon dont je m'attends à ce qu'un caractère générique fonctionne, sauf si la correspondance de type de média JAX-RS a une certaine compréhension de la sémantique des sous-composants de type de média.

+1

Je n'ai rien trouvé dans [JAX-RS spec] (http://download.oracle.com/otndocs/jcp/jaxrs-2_0-fr-eval-spec/index.html) (les sous-types sont concrets ou caractère générique, aucune combinaison) et ['MediaType # isCompatible'] (https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/MediaType.html#isCompatible-javax.ws.rs .core.MediaType-) ne peut pas le gérer. 'application/* + json semble être faux ou une fonction de vendeur de RestEasy. – dur

+1

Oui ce spécifique de resteasy. Et "application/json" correspond "application/* + json". Voir [MediaTypeMap.SubTypeMap.getPossible] (https://github.com/resteasy/Resteasy/blob/c68a7a679e0bc872e48da75eb357f6246df10ec7/resteasy-jaxrs/src/main/java/org/jboss/resteasy/core/MediaTypeMap.java#L227) – CyberWasp

+1

Mais est-ce une partie standard de JAX-RS? Est-ce que je m'attendrais à ce que cela fonctionne avec d'autres implémentations de JAX-RS? Veuillez fournir une réponse distincte afin que je puisse la marquer comme correcte si vous donnez une référence. Merci. –

Répondre

0

Il n'y a rien sur le suffixe de type de média dans les spécifications JAX-RS. Chaque fournisseur traite le suffixe à sa guise.

Je testicules mon fournisseur personnalisé (produit de type application/*+json média) avec 3 JAX-RS implémentations:

  • Jersey (avec Jettison fournisseur JSON) - faire le service pas de processus produit de type application/json média
  • RESTeasy (fournisseur de JSON interne) - service de processus produit de type application/json média
  • Apache CFX (fournisseur de JSON interne) - service de processus produit de type application/json média (si PARTIAL_HIERARCHICAL_MEDIA_SUBTYPE_CHECK propriété est true)

Mon recommdenation - ne pas faire confiance de type *+json média si vous voulez utiliser différentes implémentations JAX-RS. Ajouter explicite application/json.