Boa noite gostaria de realizar os mesmos exercícios do curso, só que utilizando jaxb com json.
Testei com o método get, por ser teoricamente mais simples, porém não funcionou.
método no carrinhoresource
@Path("{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Carrinho busca(@PathParam("id") Long id){
Carrinho carrinho = new CarrinhoDAO().busca(id);
return carrinho;
}
Classe carrinho com as anotations do jaxb
package br.com.alura.loja.modelo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import com.thoughtworks.xstream.XStream;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Carrinho {
private List<Produto> produtos = new ArrayList<Produto>();
private String rua;
private String cidade;
private long id;
public Carrinho() {
}
public Carrinho adiciona(Produto produto) {
produtos.add(produto);
return this;
}
public Carrinho para(String rua, String cidade) {
this.rua = rua;
this.cidade = cidade;
return this;
}
public Carrinho setId(long id) {
this.id = id;
return this;
}
public String getRua() {
return rua;
}
public void setRua(String rua) {
this.rua = rua;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public long getId() {
return id;
}
public void remove(long id) {
for (Iterator iterator = produtos.iterator(); iterator.hasNext();) {
Produto produto = (Produto) iterator.next();
if(produto.getId() == id) {
iterator.remove();
}
}
}
public void troca(Produto produto) {
remove(produto.getId());
adiciona(produto);
}
public void trocaQuantidade(Produto produto) {
for (Iterator iterator = produtos.iterator(); iterator.hasNext();) {
Produto p = (Produto) iterator.next();
if(p.getId() == produto.getId()) {
p.setQuantidade(produto.getQuantidade());
return;
}
}
}
public List<Produto> getProdutos() {
return produtos;
}
public String toXML() {
return new XStream().toXML(this);
}
}
Classe produto com as anotations do jaxb
package br.com.alura.loja.modelo;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Produto {
private double preco;
private long id;
private String nome;
private int quantidade;
public Produto() {
}
public Produto(long id, String nome, double preco, int quantidade) {
this.id = id;
this.nome = nome;
this.preco = preco;
this.quantidade = quantidade;
}
public double getPreco() {
return preco;
}
public long getId() {
return id;
}
public String getNome() {
return nome;
}
public int getQuantidade() {
return quantidade;
}
public double getPrecoTotal() {
return quantidade * preco;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
}
método de teste
@Test
public void testaQueBuscarUmCarrinhoTrazOCarrinhoEsperado() {
Carrinho carrinho = webTarget.path("/carrinhos/1").request().get(Carrinho.class);
Assert.assertEquals("Rua Vergueiro 3185, 8 andar", carrinho.getRua());
}
segue o stack trace
set 04, 2019 8:40:15 PM org.glassfish.jersey.server.ApplicationHandler initialize
INFO: Initiating Jersey application, version Jersey: 2.5 2013-12-18 14:27:29...
set 04, 2019 8:40:16 PM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [localhost:8080]
set 04, 2019 8:40:16 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
set 04, 2019 8:40:16 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Sending client request on thread main
1 > GET http://localhost:8080/carrinhos/1
set 04, 2019 8:40:16 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 2 * Client response received on thread main
2 < 500
2 < Connection: close
2 < Content-Length: 0
2 < Date: Wed, 04 Sep 2019 23:40:16 GMT
set 04, 2019 8:40:16 PM org.glassfish.grizzly.http.server.NetworkListener stop
INFO: Stopped listener bound to [localhost:8080]