从路径变量中检索数据并插入到模型中

Retrieve data from Path Variable and Insert to Model

我是 Java Springboot 的新手。 我想从路径变量 ("/id") 中插入 ID 到我的模型并将其保存到数据库中。

我有请求正文

{
    "firstName" : "John",
    "lastName" : "Doe"
}

我有 API 可以像这样在数据库中创建记录 我的用户控制器

 @RestController
 @RequestMapping("/api")

 public class UserController{
    @Autowired
    private UserService userService;

    @PostMapping("/{id}")
    public User create(@RequestBody User user){
        return userService.save(user);
    }
}

这是我的用户服务

@Service
@Transactional
public class UserService {

    @Autowired
    private UserRepo userRepo;

    //Create
    public User save(User user){
        return userRepo.save(user);
    }
}

这是我的用户库

public interface UserRepo extends CrudRepository<User, Long> {
    //CrudRepository will automatically CRUD
}

UserModel

@Entity
@Table(name = "users")
public class User implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "first_name", length = 25)
    private String firstName;

    @Column(name = "last_name", length = 25)
    private String lastName;
    
    @Column(name = "full_name", length = 50)
    private String fullName;

    public User() {
    }

    public User(Long id, String firstName, String lastName, String fullName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.fullName = fullName;
    }

    public Long getId() {
        return id;
    }

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

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }
}

最后,我的问题回复JSON

{
    "id": null,
    "firstName": "John",
    "lastName": "Doe",
    "fullName" : null
}

问题是如何将 @PostMapping("/id") 中的 id 插入模型用户。

如果 link 是 http://localhost:8080/api/5 响应正文是

{
    "firstName" : "Silvanna",
    "lastName" : "Rey"
}

所以响应 JSON 将如下所示:

{
    "id": 5,
    "firstName": "Silvanna",
    "lastName": "Rey",
    "fullName" : "Silvanna Rey"
}

注意:id 不是自动递增

您提到的第一个问题,即通过路径参数将变量保存到数据库,如下例所示,其工作方式如下:

http://localhost:8080/api/employees/111

 @RestController
 @RequestMapping("/api")
public class UserController{
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User create(@PathVariable String id){
        return userService.find(user);
    }
}

然而,如上所述,这些操作仅适用于 GET,这意味着您不能仅将 id 保存到数据库中,您需要自动生成一个 ID 并将其保存到数据库中,然后POST 就像您已经在做的那样,它与用户主体一起进入数据库。

   @Entity
   @Table(name = "users")
   public class User implements Serializable{
   
   // the @GeneratedValue is used to automatically generate the id
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;

 

所以总而言之,id 用于通过函数 find 从数据库中获取数据,而 save 已经生成了一个用户 id 以将其保存到数据库中。

亲爱的,您可以使用@PathVariable 注释从路径变量中获取数据。 从路径变量中获取 id 后,您可以通过调用 setUserId() 方法将其设置为用户模型的 id 属性。

尝试打击代码片段以获得所需的输出。

@PostMapping("/{id}")
public User create(@PathVariable("id") Long id, @RequestBody User user){
    // Setting data for user id
    user.setId(id);

    // Setting fullName from firstName and lastName
    String fullName = user.getFirstName()+" "+user.getLastName();
    user.setFullName(fullName);
    return userService.save(user);
}