我有一个如下类,包装字节数组:
public final class Plan {
private byte[] bytes;
private int peekIdx;
public Plan(byte[] bytes, int peekIdx) {
this.bytes = bytes;
this.peekIdx = peekIdx;
}
public Plan(byte[] bytes) {
this(bytes, 0);
}
//bunch more methods
}
此对象包含在其他对象中,
public final class Agent {
private Plan plan;
//bunch more properties...
}
现在我想反序列化JSON之类的
{"plan": [0, 1, 2]}
作为代理。但是,我不知道如何注释Plan
来实现这一目标。如果只是byte[]
就不会有问题,因为这将直接对应于Agent中的命名属性,可以将其放置为@JsonProperty("plan")
,但是我不知何故需要告诉Jackson如何包装数组在Plan
对象中。如何实现呢?真的需要自定义序列化程序吗?
答案 0 :(得分:1)
尝试将@JsonValue
放在bytes
类的Plan
-getter上。它将告诉Jackson,该类仅应使用该值进行序列化。另外,需要按以下方式指定创建者。
赞:
class Plan {
// ...
@JsonCreator
public Plan(byte[] bytes) {
this(bytes, 0);
}
@JsonValue
public byte[] getBytes() {
return bytes;
}
// ...
}
答案 1 :(得分:0)
您可以使用@JsonCreator
注释第二个构造函数,并指定要作为byte
数组参数发送的JSON字段的名称:
@JsonCreator
public Plan(@JsonProperty("plan") byte[] bytes) {
this(bytes, 0);
}
这告诉Jackson使用此构造函数,向其发送JSON对象的plan
字段的值。