Implémentation de la négociation de contenu basée sur des paramètres de demande
Les applications REST (Representational State Transfer) peuvent retourner différentes représentations des ressources. Vous pouvez utiliser la négociation de contenu basée sur des paramètres de demande pour déterminer le format de contenu utilisé pour échanger des données entre les serveurs et les clients.
Pourquoi et quand exécuter cette tâche
Les ressources peuvent représenter les données dans différents formats. Vous pouvez implémenter la négociation de contenu basée sur des URL, des paramètres de demande ou des en-têtes HTTP. Cette tâche explique la négociation de contenu basée sur des paramètres pour recevoir différents formats de données.
Vous pouvez utiliser des paramètres de demande, tels que des paramètres de requête, pour indiquer le type de contenu que doit retourner le serveur. Par exemple, si la valeur du paramètre est xml, le serveur doit retourner du contenu XML. De même, si la valeur du paramètres est json, le serveur doit retourner du contenu JSON.
En utilisant des paramètres de demande, vous réduisez le nombre d'URL par rapport à l'implémentation de la négociation basée sur des modèles d'URL. Toutefois, cette méthode nécessite d'utiliser et d'analyser la syntaxe d'un paramètre dans l'implémentation de la méthode de ressource.
Procédure
Dans l'exemple suivant, les formats de données XML et JSON sont acceptables et le format est défini par un paramètre de requête. Par défaut, XML est retourné. Dans une demande à /resources/resource?format=json le serveur retourne le format JSON. Par exemple :
@Path("/resources")
public class Resource
{
@Path("{resourceID}")
@GET
public Response getResource(@PathParam("resourceID") String resourceID, @QueryParam("format") String format)
{
if (format == null || "xml".equals(format)) {
return Response.ok(/* entity in XML format */).type(MediaType.APPLICATION_XML).build();
} else if ("json".equals(format)) {
return Response.ok(/* entity in JSON format */).type(MediaType.APPLICATION_JSON).build();
}
return Response.notAcceptable(Variant.mediaTypes(MediaType.APPLICATION_XML_TYPE, MediaType.APPLICATION_JSON_TYPE).add().build()).build();
}
}
Résultats
Vous avez implémenté la négociation de contenu en utilisant des paramètres pour déterminer les formats des ressources qui représentent des données.