Web Service REST retornar JSON

5 respostas
P

Estou fazendo um exemplo de Web Service REST, no entando não consigo retornar JSON, apenas consigo retornar XML e Text.
Segue abaixo as configurações do meu projeto:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.ProduceMime;
import javax.ws.rs.core.MediaType;

@Path("/pedido/{id}")
public class PedidoResource {
	
	@GET
	@ProduceMime(value = MediaType.APPLICATION_JSON)
	public Pedido getPedidoById(@PathParam("id") int id){
		PedidoDAO pdao = new PedidoDAO();
		return pdao.getPedidoById(id);
	}
}
import java.util.ArrayList;
import java.util.List;

//Não faz nenhuma consulta em banco, apenas preenche o bean e retorna... (aproveitei uma classe que ja havia feito...)
public class PedidoDAO {
	
	public Pedido getPedidoById(int id){
		Pedido p = new Pedido();
		List<String> lista = new ArrayList<String>();
		lista.add("1");
		lista.add("2");
		lista.add("3");
		
		p.setDescricao("PEDIDO TESTE");
		p.setId(id);
		p.setTotal(1000);
		p.add(lista);		
		return p;
	}
}

Bean Pedido.

@XmlRootElement
public class Pedido {

	private int id;
	private String descricao;
	private double total;
	private List<String> lista;
	
	public Pedido() {
	}

        //Getters & Setters

Minhas classes ficaram desta maneira... abaixo segue a configuração feita no WEB.XML:

<servlet>
		<servlet-name>Jersey Web Application</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
			<param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
		</init-param>
		<init-param>
			<param-name>com.sun.jersey.config.property.packages</param-name>
			<param-value>net.tmro.demo.json;br.com.rest</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Jersey Web Application</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>

Agora Lista de Jars do projeto:

activation.jar
ant.jar
asm-3.1.jar
comresrcgen.jar
grizzly-servlet-webserver-1.7.3.2.jar
http.jar
jaxb-api.jar
jaxb-impl.jar
jaxb-xjc.jar
jdom-1.0.jar
jersey-core-1.1.5.jar
jersey-server-1.1.5.jar
jettison-1.0-RC1.jar
json-lib-2.2.3-jdk15.jar
jsp-api-2.0-20040521.jar
jsr311-api.jar
junit-3.8.1.jar
localizer.jar
mail.jar
persistence-api-1.0.jar
rome-0.9.jar
servlet.jar
wadl2java.jar

Enfim, ta ai minhas configurações... meu problema é nao retornar JSON... se alguem tiver alguma ideia diz ae..

[]'s

5 Respostas

A

Brother,
o problema é q vc tá sem o jar responsável por gerar a saída no formato JSON.
Se estiver usando o Jersey (http://jersey.java.net/) tem q baixar o jersey-json.jar (http://download.java.net/maven/2/com/sun/jersey/jersey-json/1.7/jersey-json-1.7.jar).
No caso de outra implementação, verifique o jar correspondente.

Espero ter ajudado.
Abraço!

J

consegiu terminar ?

T

tá faltando usar @Produces

http://stackoverflow.com/questions/11881246/returning-json-object-from-rest-web-service-with-complex-objects

K

Caso queira, existe o XStream que é ótimo pra fazer essas paradas de XML e JSON, tenho me dado muito aqui nas minhas aplicações:

[url]http://xstream.codehaus.org[/url]

Exemplo do próprio site:

Serializando
package com.thoughtworks.xstream.json.test;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class WriteTest {

	public static void main(String[] args) {

        Product product = new Product("Banana", "123", 23.00);
        XStream xstream = new XStream(new JettisonMappedXmlDriver());
        xstream.setMode(XStream.NO_REFERENCES);
        xstream.alias("product", Product.class);

        System.out.println(xstream.toXML(product));		
		
	}
}
Saída
{"product":{"name":"Banana","id":123,"price":23.0}}
Deserializando
package com.thoughtworks.xstream.json.test;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;

public class ReadTest {

	public static void main(String[] args) {
		String json = "{\"product\":{\"name\":\"Banana\",\"id\":123"
		    + ",\"price\":23.0}}";
		    
		XStream xstream = new XStream(new JettisonMappedXmlDriver());
		xstream.alias("product", Product.class);
		Product product = (Product)xstream.fromXML(json);
		System.out.println(product.getName());
	}

}

Saída

Banana
J

Obrigado, gostei da ideia…
estou seguindo este artigo : [url]v[/urlhttp://www.myeclipseide.com/documentation/quickstarts/webservices_rest/[url]
http://www.myeclipseide.com/documentation/quickstarts/webservices_rest/

Criado 31 de março de 2010
Ultima resposta 29 de ago. de 2012
Respostas 5
Participantes 5