2016-06-14 79 views
0

我有,我想我的web服務通過爲jsons如何忽略傑克遜的空列表?

@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; 

} 

問題是我想的問題清單不包括在我的JSON以下實體,但我就是不能讓傑克遜忽略它們。

我試圖用@JsonIgnore註釋問題列表,但沒有結果。我該怎麼做呢?

P.S.

忘記提到了系列化是通過球衣完成的,而這裏的實際返回我的測試列表的方法

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

其實'@ JsonIgnore'應該工作。你可以顯示將實體序列化爲JSON的代碼嗎? – ericbn

+0

重點是我沒有手動序列化,球衣正在處理,當建立迴應 – Carmine

回答

0

您必須配置您的映射器忽略空數組:

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

要忽略特定屬性,com.fasterxml.jackson.annotation.JsonIgnore註釋應該:

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

編輯:您可能需要在您web.xml與這使傑克遜:

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

或配置雖然代碼:

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

參考:https://jersey.java.net/documentation/1.19.1/json.html

+0

剛剛編輯我的問題,你能告訴我怎麼能做到這一點爲jax-rs? – Carmine

+0

@Carmine,參考Jersey JSON文檔更新了答案。 – ericbn