gpt4 book ai didi

java - 如何通过 RestController 创建对象的实例,而不通过 RequestBody 传递构造函数的所有字段?

转载 作者:行者123 更新时间:2023-12-02 09:04:26 25 4
gpt4 key购买 nike

我有一个对象定义为:

@Entity
@NoArgsConstructor
public class Task {
@Id
@Getter @Setter private Integer id;
@Getter @Setter private String text;
@Getter @Setter private Boolean isDone = Boolean.FALSE;

public Task(int id, String text){
this.id = id;
this.text = text;
this.isDone = Boolean.FALSE;
}
}

如果我传入{ “ID:”:1, "text":"买果汁"作为请求体,RestController 可以创建一个任务实例。但是我不想将 id 作为请求正文中的字段传递。我该如何处理?

最佳答案

假设您使用的是 MySQL,请按如下方式更改您的实体

@Entity
@NoArgsConstructor
@Getter
@Setter
public class Task {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String text;
private Boolean isDone = Boolean.FALSE;

public Task(int id, String text){
this.id = id;
this.text = text;
this.isDone = Boolean.FALSE;
}
}

然后您的请求将更改为仅传递文本:{"text":"buy Juice"}

JPA 的保存现在将按如下方式工作

  1. 如果请求中存在 id,它将假定实体存在并更新它
  2. 如果请求中不存在 id,它将在数据库中创建一个新行并自动分配 id

P.S. - 根据您拥有的数据库,您可以为该数据库选择最佳的 ID 生成策略。例如,基于身份的生成适用于 MySQL,基于序列的生成适用于 Oracle db。

关于java - 如何通过 RestController 创建对象的实例,而不通过 RequestBody 传递构造函数的所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59925548/

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