2012-01-17 11 views
5

Sto usando RestEasy e hibernate per restituire la risposta in Jackson. Ho un giocatore di fagioli con campi: nome, id, età, posizione.Come aggiungere e ignorare un campo per la risposta JSON

Ora sto implementando due metodi di ripristino GET per la verifica di JSON.

  1. getPlayer(), che sta tornando un giocatore: nome, id, l'età, la posizione.

  2. getPlayers(), che restituisce un elenco di giocatori, ma con questo elenco di giocatori, non voglio tornare posizione.

Voglio dire, come posso aggiungere un campo per una risposta e ignorarlo per un'altra risposta.

Si prega di suggerire.

Grazie

risposta

-7

Non può semplicemente nullo il campo posizione?

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

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

    return players; 
} 
+4

questo ti apre per introdurre un bug se ti dimentichi di scrivere il codice per annullare il campo. usa '@ JsonIgnore' così non devi. –

+0

Come si risolverà il requisito dell'OP "Come posso aggiungere un campo per una risposta e ignorarlo per un'altra risposta." ?Inoltre, "dimenticarsi" di fare cose quando si codifica causerà sempre errori;) – eiden

+1

Questa sembra la soluzione più semplice per me, insieme all'aggiunta di @ JsonIgnore alle proprietà che devono essere sempre ignorate. Eiden, hai trovato un altro modo per farlo? Non mi piace il modo in cui JsonView e JsonFilter possono essere utilizzati per ottenere lo stesso risultato. – Jayz

17

si dovrebbe usare @JsonIgnore annotazione sul getter POJO.

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

Aggiornamento:

È necessario usare l'interfaccia con @JsonIgnoreProperties e impostarlo come @JSONFilter su vostra richiesta di mappatura.

Si può leggere di più su di esso qui: http://www.jroller.com/RickHigh/entry/filtering_json_feeds_from_spring

+0

che io so, ma voglio stesso campo di ignorare per un reponse e lo stesso campo per aggiungere un altro – Romi

+0

Ok allora vedere il mio aggiornamento –

+0

come indicato nel link ... ho bisogno di fare un AppDetailFilter un'interfaccia() e utilizzare @JsonFilter con la richiesta. ma non sto ottenendo ciò che dovrebbe essere nell'interfaccia, e come usarlo per ignorare i campi differenti per richieste diverse. – Romi

0

Sto usando tomee, di ignorare un campo in risposta JSON transient lavori per me, ma non so se è il modo corretto di andare (non c'è Jackson visibile alla mia domanda, ho solo incluso Jee-web API):

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"); 
    } 
} 

oggetto

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

Questo approccio può introdurre problemi quando si usa la persistenza, non andrei in questo modo. D'altra parte, se si utilizza questo oggetto solo per il trasferimento dei dati, dovrebbe andare bene. – holmicz

Problemi correlati