2012-01-17 15 views
5

Estoy usando RestEasy e hibernación para devolver la respuesta en Jackson. Tengo un reproductor de frijoles que tiene campos: nombre, id, edad, posición.Cómo agregar e ignorar un campo para la respuesta json

Ahora, estoy implementando dos métodos de descanso GET para reticing json.

  1. getPlayer(), que se vuelve un jugador: nombre, identificación, edad, posición.

  2. getPlayers(), que devuelve una lista de jugadores, pero con esta lista de jugadores, no quiero devolver la posición.

Es decir, cómo puedo agregar un campo para una respuesta e ignorarlo para otra respuesta.

Sugerido.

Gracias

Respuesta

-7

No se puede simplemente anular el campo de posición?

@GET 
@Path("/players") 
public List<Player> getPlayers(){ 
    List<Player> players = getPlayersFromHibernate(); 

    for(Player player : players) 
     player.setPosition(null); 

    return players; 
} 
+4

esto lo abre a la introducción de un error si olvida escribir el código para anular el campo. usa '@ JsonIgnore' para que no tengas que hacerlo. –

+0

¿Cómo resolverá eso el requisito del OP? "¿Cómo puedo agregar un campo para una respuesta e ignorarlo para otra respuesta?" ?Además, 'olvidar' hacer cosas cuando el código siempre causa errores;) – eiden

+1

Esto me parece la solución más simple, junto con agregar @JsonIgnore a las propiedades que siempre deben ignorarse. Eiden, ¿has encontrado alguna otra forma de hacerlo? No me gusta la forma en que se pueden usar JsonView y JsonFilter para obtener el mismo resultado. – Jayz

17

Debe utilizar @JsonIgnore anotación en el captador POJO.

http://jackson.codehaus.org/1.0.1/javadoc/org/codehaus/jackson/annotate/JsonIgnore.html

Actualización:

Es necesario utilizar el interfaz con @JsonIgnoreProperties y configurarlo como @JSONFilter en su solicitud de asignación.

Puede leer más sobre esto aquí: http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring

+0

que sé, pero quiero mismo campo de ignorar por un Reponse y el mismo campo para añadir otro – Romi

+0

Ok entonces ver a mi actualización –

+0

como se da en el enlace ... i necesidad de hacer una interfaz de AppDetailFilter(), y use @JsonFilter con la solicitud. pero no obtengo lo que debería estar en la interfaz, y cómo usarlo para ignorar diferentes campos para diferentes solicitudes. – Romi

0

estoy usando tomee, hacer caso omiso de un campo en respuesta JSON transient funciona para mí, pero no sé si es la forma correcta de ir (no hay Jackson visibles a mi solicitud, yo sólo API incluido Jee-web):

servlet

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("/") 
@Produces({ MediaType.APPLICATION_JSON }) 
public class JsonApi { 

    @GET 
    @Path("testapi") 
    public MyObject testApi() { 
     return new MyObject("myname", "mycolor"); 
    } 
} 

objeto

public class MyObject { 

    public MyObject() { 
    } 

    public MyObject(String name, String color) { 
     this.name = name; 
     this.color = color; 
    } 

    public String name; 

    public transient String color; 
} 

Respo NSE

{"name":"myname"} 
+0

Este enfoque puede presentar problemas al usar la persistencia, yo no iría de esa manera. Por otro lado, si usa este objeto solo para la transferencia de datos, debería estar bien. – holmicz

Cuestiones relacionadas