Le REPOS. Jersey. Procédure de programmation pour choisir quel type de retour: JSON ou XML?
J'ai 2 questions:
1. Puis-je créer un de la classe, de les annoter avec des annotations JAXB(pour la prise en charge XML) et de déclarer, dans web.xml
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
JSON (Jackson bibliothèque) prennent en charge? Ou j'ai besoin de créer séparément deux classes de JSON et XML?
Ou peut-être existe une façon plus élégante pour cause de REPOS service à rendre à la fois JSON et XML?
2. Comment je peux par programme choisir quel type de retour (JSON ou XML)?
Grâce.
OriginalL'auteur MyTitle | 2012-07-08
Vous devez vous connecter pour publier un commentaire.
Si votre client veut utiliser une partie de l'URL pour configurer le type de réponse, vous pouvez utiliser un filtre de Servlet.
Un moyen facile à mettre en œuvre substitution de la représentation (type de support) pourrait utiliser une URL de requête de paramètre:
/ressources/todo?format=json
Le filtre de Servlet analyse l'URL des paramètres de la requête, et si un format=json est présent, remplace ou ajoute l'en-tête accept "application/json".
Response
objet, lorsque le retour à partir de la méthode?Réponse pouvez spécifier le type de contenu: de retour de Réponse.ok. (...) .type("application/json").build();
Si vous êtes pointilleux sur les Url comme je suis..., vous pouvez utiliser une extension de fichier:
/resources/todo.json
ou/resources/todo.xml
Jersey prend déjà en charge de la sélection par extension, si vous l'activez: stackoverflow.com/questions/28369396/... avec la ServerProperties.MEDIA_TYPE_MAPPINGS (je sais que cette question est plus, juste un lien la réponse que tu voulais, parce que google m'a amené ici en premier pour la réponse sur la façon de changer les types de base sur l'extension)
OriginalL'auteur
Remarque: je suis le EclipseLink JAXB (MOXy) plomb et un membre de la JAXB (JSR-222) groupe d'experts.
Vous pouvez toujours utiliser un
Application
classe pour spécifier unMessageBodyReader
/MessageBodyWriter
pour le JSON de liaison. Je crois Jackson fournit une mise en œuvre dans son bocal. Ci-dessous est un exemple d'unApplication
classe qui spécifie MOXy que le JSON fournisseur de:EclipseLink JAXB (MOXy) propose XML natif de liaison et est conçu pour vous permettre d'utiliser le même modèle d'objet pour les deux JSON et XML. Vous pouvez l'intégrer dans votre JAX-RS application à l'aide de la
MOXyJsonProvider
classe:Côté Serveur
Vous pouvez spécifier que vos offres de service de XML et JSON messages à l'aide de la
@Produces
annotation.Pour Plus D'Informations
Côté Client
Vous pouvez utiliser le MediaType pour indiquer le type de message. Ci-dessous un exemple d'utilisation de Jersey client Api. Veuillez noter que l'URL est la même, il suffit de la demande type de média est différent.
Pour Plus D'Informations
OriginalL'auteur
Pas besoin de séparer les classes, ce que vous avez besoin est séparée méthodes:
Puis chez le client, lors de votre demande de service, vous indiquez dans le format que vous souhaitez:
accept
en-tête du client pour obtenir ce type dont j'ai besoin. Mais comment je peux retourner nécessaire type de serveur?Une fois que vous ajoutez le producess annotation, le cadre le fera automatiquement pour vous en fonction de la demande du client
ok ok:) je le comprends) Mais si je veux retourner nécessaire type selon certains autres faits (pas sur du client
accept
en-tête)? Ou dans ither mots, comment retournerxml
si le client estaccept
en-tête est JSON?Je ne vois pas en vertu de quelle situation, c'est que viable?! Dans tous les cas, le client est celui de l'initiation de la reequest et le client SAIT dans quel format il aimerait recevoir la demande, ce que vous suggérez ne sera probablement entraîner le client à vous haïr 🙂
par exemple: je veux laisser au client de choisir le type de réponse dans l'URL:
rest/get/cars/xml
ourest/get/cars/json
. Ensuite, selonpathParam
droit de retour, le type de réponse.OriginalL'auteur