Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

É possível deixar as duas possibilidades (XML e JSON) previstas no código?

Olá, gostaria de saber se é possível deixar aberto para enviar/receber XML e JSON ? Nesse caso a escolha seria de quem está chamando.

Hoje meu código está assim:

package br.com.alura.loja.resource;

import java.net.URI;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import br.com.alura.loja.dao.CarrinhoDAO;
import br.com.alura.loja.modelo.Carrinho;
import br.com.alura.loja.modelo.Produto;

@Path("carrinhos")
public class CarrinhoResource {

    @Path("{id}")
    @GET
    @Produces(MediaType.APPLICATION_XML)
    public Carrinho busca(@PathParam("id") long id) {
        Carrinho carrinho = new CarrinhoDAO().busca(id);
        return carrinho;
    }

    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public Response adiciona(Carrinho carrinho) {
        new CarrinhoDAO().adiciona(carrinho);

        URI uri = URI.create("/carrinhos/" + carrinho.getId());
        return Response.created(uri).build();
    }

    @Path("{id}/produtos/{produtoId}")
    @DELETE
    public Response removeProduto(@PathParam("id") long id, @PathParam("produtoId") long produtoId) {
        Carrinho carrinho = new CarrinhoDAO().busca(id);
        carrinho.remove(produtoId);

        return Response.ok().build();
    }

    @Path("{id}/produtos/{produtoId}/quantidade")
    @PUT
    public Response alteraQuantidadeProduto(Produto produto, @PathParam("id") long id, @PathParam("produtoId") long produtoId) {
        Carrinho carrinho = new CarrinhoDAO().busca(id);
        carrinho.trocaQuantidade(produto);

        return Response.ok().build();
    }
}
1 resposta
solução!

Fala aí Silvio, blz?

As anotações @Produces e @Consumes recebem um array de MediaType. Logo você pode especificar nelas mais de um tipo para produzir ou consumir.

@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})

A mesma coisa para o @Consumes

@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})

Dessa forma que for consumir sua API pode escolher qual o formato ele quer enviar ou receber as informações.

Espero ter Ajudado!