如何使用Jackson使用单向Java Object转换JSON对象?

时间:2016-09-27 07:22:37

标签: java json hibernate serialization jackson

我有两个名为client和quote的实体。

客户有很多报价。

许多报价都有客户。

@Entity
class Client
{
int c_id;
String clientName;
@OneToMany
List<Quote> quotes;
}

@Entity
class Quote
{
int q_id;
String item;
@ManyToOne
Client client;
}

JSON对象请求参数:

{
  "clientName":"ABC pvt Ltd",
  "quotes" :[
    {
      "item":"A"
    },
    {
      "item":"B"
    }
    {
      "item":"C"
    }   
   ]
}

我想在请求参数上面序列化到客户端对象。

ObjectMapper om = new ObjectMapper();
Client cli = om.convervalue(x,Client.class);

session.save(cli);

如果我运行上面的代码 有报价参考列表的客户

但是引用类客户端引用为空

所以,如果我想实现这一点,我会手动完成。

ObjectMapper om = new ObjectMapper();
Client cli = om.convervalue(x,Client.class);

List<Quote> quotes = cli.getQuotes;

for(int i=0;i<quotes.size();i++)
{
  Quote qu = quotes.get(i);
  qu.setClient(cli);
}

session.save(cli);

上述代码工作正常。

如何使用杰克逊图书馆自动完成。

有没有注释呢?

基本上需要双向关系序列化

2 个答案:

答案 0 :(得分:0)

使用以下注释根据hsonnate映射与@JsonManagedReference&amp;来映射你的json。 @JsonBackReference

@Entity
class Client
{
int c_id;
String clientName;
@OneToMany
@JsonManagedReference
List<Quote> quotes;
}

@Entity
class Quote
{
int q_id;
String item;
@ManyToOne
@JsonBackReference
Client client;
}

答案 1 :(得分:0)

Client.class中添加getter / setter或将字段设为公共字段。 然后尝试以下:

      String json = "{\"clientName\":\"John\","+"\"quotes\":[{\"item\":\"A\"},{\"item\":\"B\"}]}";
      ObjectMapper mapper = new ObjectMapper();
      Client client = mapper.readValue(json,Client.class);
      System.out.println(client);