gpt4 book ai didi

java - Spring post Rest无法解析对象中的对象

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:47 25 4
gpt4 key购买 nike

我正在尝试对我的 Spring Boot 后端进行后期调用,以便我可以存储一些项目。我要存储的对象中有其他对象,这是数据库的当前设计。 enter image description here

现在我想做一个后调用来在数据库中创建一个 partsused 对象。我将此 Json 对象发送到 spring boot,但收到 amount_type_id 不能为 null 的错误。所以我认为它无法解析该对象,任何人都可以看到我的 class/json 对象出了什么问题,因为我找不到问题

{
"amount":"2",
"specification":"test",
"partType":{
"idPartType":4,
"type":"leveringen"},
"amountType":{
"idAmountType":5,
"type":"m3"},
"project":{
"idProject":4,
"description":"test",
"isFinished":false,
"startDate":"2019-12-11",
"finishDate":null,
"name":"test2"
}
}

我的零件使用类

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonSerialize
private Long idPartsUsed;
private int amount;
private String specification;

@OneToOne
@JoinColumn(name = "part_type_id", referencedColumnName = "idPartType")
private PartType partType;

@OneToOne
@JoinColumn(name = "amount_type_id", referencedColumnName = "idAmountType")
private AmountType amountType;

@OneToOne
@JoinColumn(name = "project_id", referencedColumnName = "idProject")
private Project project;

我的金额类型类

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonSerialize
private Long idAmountType;
private String type;

错误信息

{
"cause": {
"cause": {
"cause": null,
"message": "Column 'amount_type_id' cannot be null"
},
"message": "could not execute statement"
},
"message": "could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement"
}

最佳答案

在您的子实体中,您通过在 AmountTypePartTypeProject 类中执行 @GenerateValue(strategy = GenerationType.IDENTITY) 来生成 id。但是,您还从 JSON 本身发送 id 值。这就是问题所在。

因此,首先,从子实体中删除 @GenerateValue(strategy = GenerationType.IDENTITY) 代码。

然后添加,将 CascadeType.ALL 添加到您的映射中。

我在我的机器上尝试过,它有效。

下面给出了我尝试过的代码。

AmountType.java

@Entity
@Getter
@Setter
@Table(name="amount_type")
public class AmountType {
@Id
@JsonSerialize
private Long idAmountType;
private String type;
}

PartType.java

@Data
@Entity
@Table(name="part_type")
public class PartType {
@Id
@JsonSerialize
private Long idPartType;
private String type;

}

Project.java

@Data
@Entity
@Table(name="project")
public class Project {

@Id
private Long idProject;
private String description;
private boolean isFinished;
private String startDate;
private String finishDate;
private String name;
}

PartsUsed.java

@Entity
@Table(name = "parts_used")
@Getter
@Setter
@NoArgsConstructor
public class PartsUsed {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonSerialize
private Long idPartsUsed;
private int amount;
private String specification;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "part_type_id", referencedColumnName = "idPartType")
private PartType partType;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "amount_type_id", referencedColumnName = "idAmountType")
private AmountType amountType;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "project_id", referencedColumnName = "idProject")
private Project project;


}

这是接收 POST 请求以创建部件的 Controller 。

@PostMapping(value = "/test")
public String test(@RequestBody PartsUsed partsUsed) {
jpaRepositoryTest.save(partsUsed);
return "test";
}

这就是我使用您的有效负载发送请求的方式。 enter image description here

这就是数据插入表中的方式。我使用了h2数据库。

enter image description here

enter image description here

希望对你有帮助:)

关于java - Spring post Rest无法解析对象中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59479043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com