我正在使用Jackson 2.1.4将POJO序列化为JSON,但我想忽略序列化的特定字段。我使用了瞬态,但它仍然在序列化该元素。
public class TestElement {
int x;
private transient String y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
}
我正在序列化如下:
public static void main(String[] args) throws JsonProcessingException {
TestElement testElement = new TestElement();
testElement.setX(10);
testElement.setY("adasd");
ObjectMapper om = new ObjectMapper();
String serialized = om.writeValueAsString(testElement);
System.err.println(serialized);
}
请不要建议@JsonIgnore
,因为我不想将我的模型与杰克逊特定的注释联系起来。是否可以仅使用瞬态完成?对象映射器上是否有任何用于可见性设置的 API?
您可以使用springs属性对其进行配置
spring.jackson.mapper.propagate-transient-marker=true
阻止Jackson序列化和反序列化的一种新方法是调用mapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER,true)
。
Jackson序列化< code>transient成员的原因是因为getter用于确定要序列化的内容,而不是成员本身——因为< code>y有一个公共getter,所以它被序列化。如果你想改变默认设置,让Jackson使用字段,只需:
om.setVisibilityChecker(
om.getSerializationConfig()
.getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
);
忽略序列化属性的另一种方法是直接在类上执行:
@JsonIgnoreProperties(value = { "y" })
public class TestElement {
...
另一种方式是直接在球场上:
public class TestElement {
@JsonIgnore
private String y;
...
希望这有帮助。
问题内容: 杰克逊(Jackson)做的事情确实很奇怪,我找不到任何解释。我正在执行多态序列化,当对象独立时它可以完美地工作。但是,如果将同一个对象放入列表中并对其进行序列化,则会删除类型信息。 它丢失类型信息的事实将导致人们怀疑类型擦除。但这是在列表 内容 的序列化过程中发生的。Jackson要做的只是检查要序列化的当前对象以确定其类型。 我使用杰克逊2.5.1创建了一个示例: 这是输出: 如您
杰克逊做了一件非常奇怪的事,我找不到任何解释。我正在进行多态序列化,当一个对象独立运行时,它可以完美地工作。但是,如果将同一对象放入列表并序列化该列表,则会删除类型信息。 它丢失类型信息的事实会导致可疑的类型擦除。但是这发生在序列化列表内容的过程中;Jackson所要做的就是检查它正在序列化的当前对象以确定其类型。 以下是输出: 如您所见,当对象位于列表中时,Jackson没有添加类型信息。有人知
问题内容: 有效的Java-要保持单例保证,您必须声明所有实例字段都是瞬态的,并提供一个“ readResolve”方法。通过在此处声明瞬态场能实现什么?这是一个示例: 无论我是否将’state’变量声明为瞬态,我都会将c.getState()gettign打印为25。我在这里缺少什么吗? 问题答案: 通过使属性变为瞬态而获得的好处是,您无需序列化状态。序列化是不必要的,因为无论如何它都会被rea
是否有方法序列化类的瞬态字段?文档中提到默认情况下不支持它,但是否有办法打开它? 非常感谢
我有以下设置: ValidationResults类序列化后,我收到以下错误: 我使用play.libs.Json实用程序类,它只是Jackson对象映射器的包装器。有人知道问题是什么吗?我如何解决这个问题? ValidationError类的结构如下:
我对Jackson和类型层次结构有以下问题。我正在序列化一个类SubA,该类将扩展为一个字符串,然后尝试将其反序列化回来。当然,在编译时,系统不知道它是基还是SubA,因此我希望它是基,如果它是SubA,则会在编译后执行一些其他操作。 我的基本类看起来像: ...和一个派生自的类: ... 我试图执行以下代码: String是: 但我一次又一次地犯同样的错误。映射器现在知道如何处理另一个类参数-它