Jackson将String属性序列化和反序列化为JSON

时间:2013-04-17 07:45:44

标签: json serialization jackson deserialization playframework-2.1

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

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

    @Lob
    public String points;
}

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

我不想将其反序列化为一系列Points,因为它只会用于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?

任何其他注释?

1 个答案:

答案 0 :(得分:3)

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

@Lob
public String points;

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

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

虽然我不喜欢吸气剂和吸气剂,但它有效。

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