2016-06-14 8 views
0

Ich habe folgende Entitäten, die ich meine Web-Service wollen als jsonsWie leere Listen in Jackson ignorieren?

@Entity(name = "tests") 
public class Test { 

    @Id 
    @GeneratedValue 
    private int id; 

    @Column(name = "test_name") 
    private String name; 

    @JoinColumn(name = "test_id") 
    @OneToMany(cascade = CascadeType.REMOVE) 
    private List<Question> questions; 

} 

@Entity(name = "questions") 
public class Question { 

    @Id 
    @GeneratedValue 
    private int id; 

    @Column 
    private String question; 

    @Column(name = "is_multi_select") 
    private boolean isMultiSelect; 

    @JoinColumn(name = "question_id") 
    @OneToMany(cascade = CascadeType.REMOVE) 
    private List<Answer> answers; 

} 

Das Problem passieren wird ich die Fragenliste soll nicht in meinem json aufgenommen werden, aber ich kann einfach nicht jackson sie machen ignorieren .

Ich habe versucht, die Fragenliste mit @JsonIgnore annotiert, aber kein Ergebnis. Wie mache ich das?

P.S.

vergessen zu erwähnen, dass die Serialisierung über Jersey getan wird, und hier ist die Methode, die tatsächlich

meine Testliste gibt
@GET 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/tests") 
public Response getLanguageList() { 
    List<Test> tests = TestDao.getTests(); 
    return Response.status(200).entity(tests).build(); 
} 
+0

Eigentlich '@ JsonIgnore' funktionieren sollte. Können Sie den Code anzeigen, der die Entitäten zu JSON serialisiert? – ericbn

+0

der Punkt ist, ich bin nicht Serialisierung von Hand, das Trikot behandelt, dass beim Erstellen Antwort – Carmine

Antwort

0

Sie haben Ihre Mapper konfigurieren leere Arrays zu ignorieren:

ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, false); 

Um eine bestimmte Eigenschaft zu ignorieren, sollte die com.fasterxml.jackson.annotation.JsonIgnore Annotation tun:

@JsonIgnore 
@JoinColumn(name = "test_id") 
@OneToMany(cascade = CascadeType.REMOVE) 
private List<Question> questions; 

EDIT: Sie müssen möglicherweise Jackson mit diesem in Ihrem web.xml aktivieren:

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 

oder Konfiguration obwohl Code:

ClientConfig clientConfig = new DefaultClientConfig(); 
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); 
Client client = Client.create(clientConfig); 

Referenz: https://jersey.java.net/documentation/1.19.1/json.html

+0

nur meine Frage bearbeitet, können Sie bitte sagen, wie kann ich das für Jax-Rs tun? – Carmine

+0

@Carmine, aktualisierte Antwort mit Bezug auf die Jersey JSON-Dokumentation. – ericbn

Verwandte Themen