【问题标题】:JSON deserializer returns "null" for Collection type in REST api @RequestBodyJSON 反序列化器在 REST api @RequestBody 中为 Collection 类型返回“null”
【发布时间】:2026-02-10 23:55:02
【问题描述】:

我有一个没有反序列化 json 中的数组类型的休息控制器..

@PostMapping()
@ResponseBody
public ResponseEntity<Team> createteam(@RequestBody Team team) throws JsonProcessingException {

    Team savedTeam = teamService.createTeam(team);
    return new ResponseEntity<Team>(savedTeam, HttpStatus.CREATED);

}

下面是我的实体类。

@Entity
@JsonIdentityInfo(generator = IntSequenceGenerator.class)
public class Team {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    @OneToMany(mappedBy = "team", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Developer> developers;


    
    public Team(String name, List<Developer> developer) {
        super();
        this.name = name;
        this.developers = developer;
    }


    public Team() {
        super();

    }
    


    public List<Developer> getDeveloper() {
        return developers;
    }


    public void setDeveloper(List<Developer> developer) {
        this.developers = developer;
    }


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

和我的另一个实体..

package com.demo.springbootdemo.entity;

   
@Entity
@JsonIdentityInfo(generator = IntSequenceGenerator.class)
public class Developer {

    @Id
    @GeneratedValue
    private Long id;
    @ManyToOne
    private Team team;
    private Long phone;
    private String name;

    public Developer() {
        super();
    }

    public Developer(Team team, Long phone, String name) {
        super();
        this.team = team;
        this.phone = phone;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Team getTeam() {
        return team;
    }

    public void setTeam(Team team) {
        this.team = team;
    }

    public Long getPhone() {
        return phone;
    }

    public void setPhone(Long phone) {
        this.phone = phone;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

下面是我的 JSON 有效负载,当我调用 post 方法时它返回空“开发人员”。我尝试更改 json 有效负载中的属性数量,但是我仍然无法弄清楚为什么我的 json 不适用序列化到开发者列表..

    {
    
    "id": 1004,
    "name": "claim",
    "developers": [
        {
            
           "id" :1,
            "phone": 9092123,
            "name": "raina"
        }
        
        
    ]
}

【问题讨论】:

  • 任何错误日志什么的?
  • 不。我只是为开发人员获取空值。团队的剩余有效负载已正确反序列化

标签: java json spring-boot rest serialization


【解决方案1】:

我不确定您使用的是什么反序列化器,但使用Jackson ObjectMapper 我解决了它更改了developers 属性的getter 和setter 的方法名称:它们应该被称为setDevelopersgetDevelopers。在您的代码中,它们被称为 setDevelopergetDeveloper,没有最后的 S。

为避免此类问题,我只是将 Lombok 添加为依赖项,它负责创建 setter 和 getter。

使用Lombok,您的 Team 类将如下所示:


// ... more imports here...
import lombok.Data;

@Data
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
public class Team {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    @OneToMany(mappedBy = "team", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Developer> developers;    
}

您可能需要添加更多的 Lombok 注解来根据您的需要生成构造方法。

【讨论】:

    最近更新 更多