Implementando Negociação de Conteúdo com Base nos Parâmetros de Pedido
Os aplicativos Representational State Transfer (REST) podem retornar representações de recursos diferentes. É possível usar a negociação de conteúdo com base nos parâmetros de pedido para determinar o formato de conteúdo que é usado para trocar dados entre os servidores e clientes.
Sobre Esta Tarefa
Os recursos podem representar dados em formatos diferentes. É possível implementar negociação de conteúdo com base nas URLs, nos parâmetros de pedidos ou nos cabeçalhos HTTP. Essa tarefa descreve a negociação de conteúdo com base nos parâmetros de pedido para receber formatos de dados diferentes.
É possível usar os parâmetros de pedido, como parâmetros de consulta, para indicar o tipo de conteúdo para o servidor retornar. Por exemplo, se o valor de parâmetro for xml, espera-se que o servidor retorne o conteúdo XML. Da mesma forma, se o valor de parâmetro for json, espera-se que o servidor retorne o conteúdo JSON.
O uso dos parâmetros de pedido reduz os números de URLs em relação à implementação da negociação de conteúdo com base nos padrões de URL. Entretanto, esse método requer o uso e a análise de um parâmetro na implementação de método de recurso.
Procedimento
No seguinte exemplo, os formatos de dados XML e JSON são aceitáveis e o formato é especificado por um parâmetro de consulta. Por padrão, XML é retornado. Um pedido para /resources/resource?format=json resulta no formato JSON que está sendo retornado a partir do servidor, como por exemplo:
@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();
}
}
Resultados
Você implementou a negociação de conteúdo usando parâmetros para determinar os formatos de recursos que representam dados.