2016-08-24 55 views
0

我想從傑克遜2.3升級到傑克遜2.7,並且它似乎@JsonIgnore(Include.NON_DEFAULT)行爲已更改。 用下面的代碼傑克遜Included.NON_DEFAULT不工作在2.7.0

package jackson; 

import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonInclude.Include; 
import com.fasterxml.jackson.databind.ObjectMapper; 

public class Test { 
    public static void main (String args[]) throws Exception { 
     MyClass foo = new MyClass(); 
     ObjectMapper mapper = new ObjectMapper(); 
     System.out.println(mapper.writeValueAsString(foo)); 
    } 

    public static enum MyEnum { A, B, C }; 

    public static class MyClass { 
     public String name = "John"; 

     @JsonInclude(Include.NON_DEFAULT) 
     public MyEnum myEnum = MyEnum.A; 
    } 
} 

我得到使用2.7的輸出:以下使用2.3

{"name":"John","myEnum":"A"} 

和:

{"name":"John"} 

如何使用2.7版本複製在2.3的行爲?

+0

我相信這是一個迴歸bug,並且已經爲Jackson問題跟蹤器打開了一個bug報告。 2.6.7沒有這個問題,所以你可以考慮使用,如果沒有你需要的另一個2.7功能。 –

回答

1

根據the bug ticket我把這個,它正在按預期和該功能可以通過結構化類的實現:

@JsonInclude(JsonInclude.Include.NON_DEFAULT) 
public static class MyClass { 

    @JsonInclude(JsonInclude.Include.ALWAYS) 
    public String name = "John"; 

    public MyEnum myEnum = MyEnum.A; 
} 

見票從筆者更詳盡的解釋。