postman POST请求将所有值保存到一列

nfzehxib  于 2024-01-07  发布在  Postman
关注(0)|答案(2)|浏览(339)

我使用Postman发送一个带有一些值的POST请求(我放了两个字符串,一个是用户名,另一个是邮件),但所有数据都保存到第一列(“用户名”)。我做错了什么?

我试过了。

  1. {
  2. "username": "mm46676",
  3. "mail": "[email protected]"
  4. }

字符串
我希望mm46676保存在用户名列中,email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)保存在邮件列中。我使用H2控制台查看它是如何保存在db.

中的
EmployeeController.java

  1. import com.incompatibleTypes.plancation.plancationapp.model.Employee;
  2. import com.incompatibleTypes.plancation.plancationapp.repository.EmployeeRepository;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.*;
  7. @Controller
  8. @RequestMapping(path = "/employee")
  9. public class EmployeeController {
  10. private final EmployeeRepository employeeRepository;
  11. public EmployeeController(EmployeeRepository employeeRepository) {
  12. this.employeeRepository = employeeRepository;
  13. }
  14. @GetMapping("/all")
  15. public @ResponseBody Iterable<Employee> showAllEmployees(){
  16. return employeeRepository.findAll();
  17. }
  18. @PostMapping(path = "/add")
  19. public @ResponseBody String addNewEmployee (@RequestBody String username, String mail){
  20. Employee employee = new Employee();
  21. employee.setUsername(username);
  22. employee.setMail(mail);
  23. employeeRepository.save(employee);
  24. return "Employee Saved!";
  25. }
  26. }


员工模型(如果它能以任何方式提供帮助)

  1. package com.incompatibleTypes.plancation.plancationapp.model;
  2. import jakarta.persistence.*;
  3. import lombok.Data;
  4. import java.time.LocalDateTime;
  5. import java.util.HashSet;
  6. import java.util.Set;
  7. import java.util.UUID;
  8. @Data
  9. @Entity
  10. @Table(name = "employee")
  11. public class Employee {
  12. @Id
  13. @GeneratedValue(strategy = GenerationType.UUID)
  14. private UUID id;
  15. private Role role;
  16. @Column(name = "username")
  17. private String username;
  18. @Column(name = "mail")
  19. private String mail;
  20. @OneToOne(fetch = FetchType.LAZY)
  21. @JoinColumn(name = "department_id")
  22. private Department department;
  23. @ManyToOne
  24. @JoinColumn(name = "minimal_vacation_day_id")
  25. private VacationDay minimalVacationDay;
  26. @ManyToMany
  27. @JoinTable(
  28. name = "employee_bonusvacdays",
  29. joinColumns = @JoinColumn(name = "bonus_vacation_day_id"),
  30. inverseJoinColumns = @JoinColumn(name = "employee_id")
  31. )
  32. private Set<BonusVacationDay> bonusVacationDays = new HashSet<>();
  33. private LocalDateTime dateEmployed;
  34. }

wlzqhblo

wlzqhblo1#

代码中的问题是当将请求体作为方法参数传递时。使用以下代码:

  1. public @ResponseBody String addNewEmployee (@RequestBody String username, String mail)

字符串
整个JSON主体作为String传递给变量username。您应该传递一个带有字段usernamemail的对象。这可以是实体或-甚至更好-专用POJO又名DTO。类似于以下内容:

  1. public @ResponseBody String addNewEmployee (@RequestBody EmployeeDTO data) {
  2. Employee employee = new Employee();
  3. employee.setUsername(data.getUsername());
  4. employee.setMail(data.getMail());
  5. employeeRepository.save(employee);
  6. return "Employee Saved!";
  7. }

8dtrkrch

8dtrkrch2#

你在控制器中使用@RequestBody和String,在这种情况下,你的输入变成了一个字符串。试着像这样替换:

  1. @PostMapping(path = "/add")
  2. public @ResponseBody String addNewEmployee(@RequestBody Employee employee){
  3. employeeRepository.save(employee);
  4. return "Employee Saved!";
  5. }

字符串
祝你好运!

相关问题