获取json数组并将其作为字符串存储在DB中

时间:2014-01-27 18:37:07

标签: arrays json string jaxb persistence

我有一个接收json的rest资源:

{
"id":"MyHotel”,
properties:[
    {"id": "location",
     "value":"downtown"},
    {"id": "free wi-fi",
     "value": "yes"}]
}

通常可以用java代码表示为

@XmlRootElement(name = "loginMethod")
@XmlAccessorType(XmlAccessType.FIELD)
public class Hotel{
@XmlElement(name="id", required="true")
private String id;
@XmlElementWrapper(name = "properties", required = true)
    @XmlElement(name = "property")
    private List<HotelProperties> properties;
}

@XmlRootElement(name = "properties")
@XmlAccessorType(XmlAccessType.FIELD)
public class HotelProperties{
    @XmlElement(name = "id", required = true)
    private String id;
    @XmlElement(name = "value", required = true)
    private String value;
}

但是我只存储这些信息并按需提供给其他服务,这样我就不想处理数据库中的List了。 我更喜欢将Hotel的id存储在一列中,将整个JsonArray存储在另一列中 - 不需要任何解析为String。所以我的JPA实体看起来像:

@Entity
@Table(name="HOTELS")
public class HotelEntity{
    @Column(name = "id", nullable = false)
    private String id;
    @Column(name = "properties", nullable = false)
    private String properties;
}

看起来很明显,但我不明白怎么做,在互联网上找不到这样的东西。非常感谢您的意见。

1 个答案:

答案 0 :(得分:0)

两种可能的选择: 最简单的选择只是创建一个字符串:

JSONObject obj = new JSONObject();
obj.put("list",myHotel.getProperties());
hotelEntity.setProperties(obj.toString);

更全面 - 来回使用杰克逊

ObjectMapper objectMapper = new ObjectMapper();
hotelEntity.setProperties(objectMapper.writeValueAsString(myHotel.getProperties()));
List<HotelProperties>=new ArrayList<HotelProperties>();
props=objectMapper.readValue(myHotel.getProperties(),new TypeReference<ArrayList<HotelProperties>>() {});