2017-12-15 5 views
0

私はスプリングブートでAPIレストを構築します。私は子供の魔法使いの中に親子関係を持っています。Springジャーナルの逆シリアル化は、配列の最初の項目のみを選択します。

デシリアライズでは、配列の最初の項目だけが選択されるという問題があります。他のすべてがうまくいくようです。親と子はデータベースにも存在します。

私はこのような何か送る:

"user": { 
    "name": "foo", 
    "childs": [ 
    { 
     "name": "bar", 
     .... 
    }, 
    { 
     "name": "foobar", 
     .... 
    } 
    ], 
    .... 
} 

をしかし、この持続ました:この上の任意の手がかり

​​

を?

更新

親エンティティ:

@JsonIdentityInfo(
     generator = ObjectIdGenerators.PropertyGenerator.class, 
     property = "id", 
     scope = User.class) 
@Entity(name = "users") 
@Table(name = "users") 
public class User extends ModelEntity { 

    Model's fields... 
    ... 

    @JsonView(value = {DTOViews.PrivateProfile.class, DTOViews.Owner.class}) 
    @JsonManagedReference(value = "User-ProfessionalExperience") 
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    private Set<ProfessionalExperience> professionalExperiences; 
} 

子エンティティ:

@JsonIdentityInfo(
    generator = ObjectIdGenerators.PropertyGenerator.class, 
    property = "id", 
    scope = ProfessionalExperience.class) 
@Entity 
@Table(name = "professional_experiences") 
public class ProfessionalExperience extends ModelEntity { 

    Model's fields... 
    ... 

    @JsonBackReference(value = "User-ProfessionalExperience") 
    @ManyToOne 
    @JoinColumn(name = "user_id", nullable = false) 
    private User user; 
} 

コントローラー:

@RequestMapping(method = RequestMethod.POST) 
public MappingJacksonValue create(@RequestBody @Valid User userToCreate, BindingResult result) { 

    ... 
} 

は、事前にすべてのいただきありがとうございます。

+1

このプロセスの実際のコードを表示できますか? – craigwor

+1

私は 'user'のクラスと' child'のクラスを参照する必要があります – Salman

+0

@craigworコードで更新しました。君たちありがとう。 –

答えて

0

だから、ついにそれを解決しました。この問題は、関係コレクション型とhasCode()/ equals()メソッドから発生します。

私のモデル内のすべてのエンティティは、 "ModelEntity"クラスから拡張されています。このクラスは、すべての拡張モデルのIDとレコードのアクティブなフィールドと、これらのフィールドに基づくhasCode/equalsメソッドを提供します。 "User"と "ProfessionalExperience"の関係は集合として定義されているため、重複した要素を格納することはできません。

子どもたちが異なる要素であることをジャクソンに伝えるには、各モデルクラスのhasCode/equalsを、それぞれに定義されたフィールドで上書きする必要があります。

関連する問題