@JsonValue 仅能标注一个非 void 且泛型非 void 的 public 方法或字段(推荐使用 getter);
若同时标注两个,Jackson 会直接抛出错误;
该注解只负责序列化(Java → JSON),反序列化(JSON → Java)还需配合 @JsonCreator 或使用默认构造器加 setter。由于代码中的 data 是只读 final 字段,建议补充一个带参数的 @JsonCreator 构造器来支持反序列化;
List> 在序列化时类型不够明确,推荐使用 List 或更稳妥的 List——因为 long 和 double 都属于 Number 类型。
下面提供一个完整可运行的示例(已包含反序列化支持):
public class DataPoint {
private final List data;
public DataPoint(long date, double counts) {
this.data = List.of(date, counts);
}
@JsonCreator
public DataPoint(@JsonProperty("data") List data) {
if (data == null || data.size() != 2) {
throw new IllegalArgumentException("DataPoint requires exactly 2 numbers");
}
this.data = data;
}
@JsonValue
public List getData() {
return data;
}
}