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的@Expose和new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();?
如果您只希望它用于特定类型,您也可以只使用注释:
@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)
对应的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)
请参阅这个非常相似问题的答案。
似乎有一种方法可以配置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)
| 归档时间: |
|
| 查看次数: |
4442 次 |
| 最近记录: |