我有一个接收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;
}
看起来很明显,但我不明白怎么做,在互联网上找不到这样的东西。非常感谢您的意见。
答案 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>>() {});