Spring Jackson反序列化只选择数组的第一项

问题描述 投票:0回答:1

我用弹簧靴建造一个api休息。我有一个亲子关系,把孩子当作一系列对象。

问题是反序列化只选择数组的第一项。其他一切似乎都很好。父级和子级也在数据库中被支持。

我发送这样的东西:

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

但坚持这个:

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

这有什么线索吗?

Update

家长实体:

@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) {

    ...
}

谢谢大家。

java arrays spring spring-boot jackson
1个回答
0
投票

所以,我终于解决了它。问题来自关系集合类型和hashCode()/ equals()方法。

我的模型中的所有实体都从“ModelEntity”类扩展而来。此类为所有扩展模型提供id和记录活动字段,并基于这些字段提供hasCode / equals方法。由于“User”和“ProfessionalExperience”之间的关系被定义为一个集合,它不能存储重复的元素。

因此,为了告诉jackson孩子们是不同的元素,我们需要在每个模型类中使用每个模型中定义的字段覆盖hashCode / equals。

© www.soinside.com 2019 - 2024. All rights reserved.