2

我有一个看起来像这样的模型(播放 2.1.1 java ebean)

@Entity
public class Link extends Model {
    @Id
    public Long id;

    @Lob
    public String points;
}

其中 points 是一个原始 json 字符串,其中包含数组中的 x、y 坐标。

我不想将其反序列化为点数组,因为它只会用于 UI。因此,我想将其保存到数据库中的文本字段

我希望属性点在通过线路发送到前端时被序列化为 json 数组,并且我希望前端能够发送 json 数组并再次将其变为字符串。

在控制器中:

// Serialize
List<Link> links = Link.findAll();
return ok(Json.toJson(links));

// Deserialize
Link link = Json.fromJson(request().body().asJson(), Link.class);

我该怎么做?

自定义序列化器,反序列化器?

@JsonRawValue?

还有其他注释吗?

4

1 回答 1

3

答案比你想象的要简单得多。

@Lob
public String points;

public JsonNode getPoints() {
    return Json.parse(StringUtils.isBlank(points) ? "[]" : points);
}

@JsonSetter
public void setPoints(JsonNode json) {
    points = json.toString();
}

虽然我不太喜欢 getter 和 setter,但它确实有效。

如果有人有更通用的更好解决方案,请随时发布另一个答案:)

于 2013-04-17T11:19:11.683 回答