杰克逊:仅序列化标记的字段

gor*_*tde 5 java serialization json jackson gson

我正在尝试做一些在gson中非常容易的事情.由于我切换到Jackson作为序列化器,我无法弄清楚如何实现这个:

我想仅序列化已由Annotation标记的字段.GSON代码将是:

class Foo {
    @Expose
    public String sometext="Hello World";
    @Expose
    public int somenumber=30;
    public float noop=1.0;
    ...
 }
Run Code Online (Sandbox Code Playgroud)

应该导致(JSON)

 {
    Foo: {
        sometext:'Hello World',
        somenumber: 30
    }
 }
Run Code Online (Sandbox Code Playgroud)

(语法错误可能会被忽略 - 源仅用于演示)

那么什么是杰克逊对口GSON的@Exposenew GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

fis*_*tte 9

如果您只希望它用于特定类型,您也可以只使用注释:

@JsonAutoDetect(
    fieldVisibility = Visibility.NONE,
    setterVisibility = Visibility.NONE,
    getterVisibility = Visibility.NONE,
    isGetterVisibility = Visibility.NONE,
    creatorVisibility = Visibility.NONE
)
public class Foo  {
    @JsonProperty
    public String sometext="Hello World";
    @JsonProperty
    public int somenumber=30;
    // noop won't get serialized
    public float noop= 1.0f;
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ock 5

对应的new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();是初始化一个 ObjectMapper,如下所示:

...
ObjectMapper objectMapper = new ObjectMapper();        
objectMapper.disable(MapperFeature.AUTO_DETECT_CREATORS,
            MapperFeature.AUTO_DETECT_FIELDS,
            MapperFeature.AUTO_DETECT_GETTERS,
            MapperFeature.AUTO_DETECT_IS_GETTERS);
...
Run Code Online (Sandbox Code Playgroud)

@Expose那么 的对应项是@JsonProperty。使用上面的示例 bean:

class Foo {
    @JsonProperty
    public String sometext="Hello World";
    @JsonProperty
    public int somenumber=30;
    public float noop=1.0;
    ...
 }
Run Code Online (Sandbox Code Playgroud)

请参阅这个非常相似问题的答案。


isa*_*sah 4

似乎有一种方法可以配置ObjectMapper为忽略所有未注释的字段。

ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(getSerializationConfig().getDefaultVisibilityChecker()
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE));
Run Code Online (Sandbox Code Playgroud)

来源