[英]Conflicting types of serialization/deserialization and annotations
我刚刚开始学习序列化/反序列化,我对在何时何地使用哪种类型感到有点困惑……让我解释一下:
我有一个 object 包含许多字段,其中一些充满了“无用”信息。 现在,当我出于调试目的记录此类 object 的内容时,我希望 output 具有良好的 json 格式。
因此,在这个 object 的toString()
方法中,我执行以下操作:
import com.fasterxml.jackson.databind.ObjectMapper;
...
...
@Override
public String toString() {
ObjectMapper objectMapper = new ObjectMapper();
String s = "";
try{
s = objectMapper.writeValueAsString(this);
} catch (Exception e) {
}
return s;
}
但这也会记录所有无用的字段。
所以我环顾四周,发现来自com.fasterxml.jackson.annotation.JsonIgnore
的@JsonIgnore
注释,我可以将其放在无用字段的顶部,以免记录它们。
但据我所知,序列化是将 java object 转换为字节流的过程,这样它就可以写入文件,保存在 session 中,通过 inte.net 发送。 所以我的菜鸟问题是:是否有可能在某些字段上使用@JsonIgnore
注释会导致这些字段未保存到 session(我使用 hazelcast 地图),或者未在我发送的 http 响应中发送,或者没有被写入文件如果我决定这样做?
如果上一个问题的答案是否定的,那么是因为这些类型的操作(保存在 session 中,写入文件,作为 http 响应发送)使用与objectMapper.writeValueAsString(this);
所以他们不冲突?
在您的情况下,您正在使用 Jackson 的 ObjectMapper 将 object 转换为字符串表示形式(格式为 JSON)。 @JsonIgnore
注释是 Jackson 注释的一部分,将防止用它注释的字段包含在 object 的 JSON 表示中。
但是,这只影响 ObjectMapper 创建的字符串表示,而不影响序列化/反序列化的其他 forms。 如果您想以特定方式持久化 object,您可能需要使用不同形式的序列化(例如二进制序列化)或创建排除您不想保存的字段的自定义表示。
所以回答你的问题:
不,使用@JsonIgnore
不会影响保存在 session 中或作为 HTTP 响应发送的 object。 对,那是正确的。 序列化/反序列化的不同 forms 可能会以不同方式处理字段,即使它们是同一个 object 的一部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.