2016-09-27 4 views
0

私はクライアントと引用と呼ばれる2つのエンティティを持っています。Jacksonを使用して単方向JavaオブジェクトでJSONオブジェクトを変換する方法は?

多くの引用符を持つクライアント。

多くのクォートはシングルクライアントを持っています。

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

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

JSONオブジェクト・リクエストのParam:

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

私は、クライアントオブジェクトにリクエストのparamの上にシリアライズします。

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

session.save(cli); 

私は引用リファレンスのコード上記 クライアントの持つリストを実行する場合。

ただし、クォートクラスクライアント参照はnullです。

私がこれを達成したいのであれば、私はそれを手動で行いました。

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); 

上記のコードは正常に動作します。

Jackson Libraryで自動的に行う方法。

注釈はありますか?

基本的に双方向リレーションシリアライズが必要です

答えて

0

は@JsonManagedReference & @JsonBackReference Client.class

@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; 
} 
0

とのHibernateのマッピングに基づいて、あなたのJSONをマッピングするには、以下のアノテーションを使用ゲッター/セッターを追加したり、フィールドを公開します。 次に試してください:

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