1
resposta

Assinatura do método que implementa o PUT com o id do produto

@Path("{id}/produtos/{produtoId}")
@PUT
@Consumes(MediaType.APPLICATION_XML)
public Response alteraProduto(@PathParam("id") long id, @PathParam("produtoId") long produtoId, String conteudo) {
    Carrinho carrinho = new CarrinhoDAO().busca(id);
    Produto produto = (Produto) new XStream().fromXML(conteudo);
    carrinho.troca(produto);
    return Response.ok().build();
}

@Path("{id}/produtos/{produtoId}/quantidade")
@PUT
@Consumes(MediaType.APPLICATION_XML)
public Response alteraProduto(@PathParam("id") long id, @PathParam("produtoId") long produtoId, String conteudo) {
    Carrinho carrinho = new CarrinhoDAO().busca(id);
    Produto produto = (Produto) new XStream().fromXML(conteudo);
    carrinho.trocaQuantidade(produto);
    return Response.ok().build();
}

Observei que o parâmetro id do carrinho foi utilizado internamente para localizar o objeto carrinho no BD, porém o parâmetro produtoId não é utilizado internamente no método, só está servindo para o path. Não seria importante validar se o Produto passado via o parâmetro conteudo refere-se ao produto identificado pelo produtoId passado no path?

1 resposta

Oi Cleonaldo

Sim, seria bom ter uma validação para confirmar que trata-se do mesmo produto