Spring引导控制器中的Post请求抛出;java.sql.SQLIntegrityConstraintViolationException:Column';columnname';不能为空";

Spring引导控制器中的Post请求抛出;java.sql.SQLIntegrityConstraintViolationException:Column';columnname';不能为空";,java,mysql,spring,spring-boot,Java,Mysql,Spring,Spring Boot,我开始学习SpringBoot,目前正在尝试编写我的第一个API。创建新课程的控制器端点工作正常(通过邮递员发送JSON对象)。但是,我创建新申请者的端点返回 { "timestamp": "2020-11-14T15:21:47.189+00:00", "status": 500, "error": "Internal Server Error", "m

我开始学习SpringBoot,目前正在尝试编写我的第一个API。创建新课程的控制器端点工作正常(通过邮递员发送JSON对象)。但是,我创建新申请者的端点返回

{
    "timestamp": "2020-11-14T15:21:47.189+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "message": "",
    "path": "/demo/addapplicant"
}
邮递员和

java.sql.SQLIntegrityConstraintViolationException:列“性别” 不能为空

在终端窗口中。 当我将MySQL数据库更改为允许为null表示性别时,它只会为不同的属性提供相同的异常。我假设JSON没有正确地转换为Java对象。但由于它对课程有效,我不确定是什么导致了这个问题

申请人类别:

package com.example.demoSql;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;

@Entity
public class Applicant {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Integer id;

  private String firstname;

  private String lastname;
  
  private String gender; //only m, w, d allowed
  
  private Date birthdate;
  
  private String city;
  
  private Integer zip_code;
  
  private String street;
  
  private String housenumber;
  
  private Float highschool_grade;
  
  private String highschool_certificate;

  public Integer getId() {
    return id;
  }

  public void setId(Integer 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 gender() {
    return gender;
  }

  public void gender(String gender) {
    this.gender = gender;
  }
  
  public Date getBirthdate() {
    return birthdate;
  }

  public void setBirthdate(Date birthdate) {
    this.birthdate = birthdate;
  }

  public String city() {
    return city;
  }

  public void setCity(String city) {
    this.city = city;
  }
  
  public Integer getZipCode() {
    return zip_code;
  }

  public void setZipCode(Integer zip_code) {
    this.zip_code = zip_code;
  }
  
  public String getStreet() {
    return street;
  }

  public void setStreet(String street) {
    this.street = street;
  }
  
  public String getHousenumber() {
    return housenumber;
  }

  public void setHousenumber(String housenumber) {
    this.housenumber = housenumber;
  }
  
  public Float getHighschoolGrade() {
    return highschool_grade;
  }

  public void setHighschoolGrade(Float highschool_grade) {
    this.highschool_grade = highschool_grade;
  }
  
  public String getHighschoolCertificate() {
    return highschool_certificate;
  }

  public void setHighschoolCertificate(String highschool_certificate) {
    this.highschool_certificate = highschool_certificate;
  }
}
控制员:

package com.example.demoSql;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller 
@RequestMapping(path="/demo")
public class MainController {
  @Autowired
  private CourseRepository courseRepository;
  @Autowired
  private ApplicantRepository applicantRepository;

  @PostMapping(path="/addcourse")
  public @ResponseBody String addNewCourse (@RequestBody Course course) {
    courseRepository.save(course);
    return "Saved";
  }

  @GetMapping(path="/allcourses")
  public @ResponseBody Iterable<Course> getAllUsers() {
    // This returns a JSON or XML with the courses
    return courseRepository.findAll();
  }
  
  @PostMapping(path="/addapplicant")
  public @ResponseBody String addNewApplicant (@RequestBody Applicant applicant) {
    applicantRepository.save(applicant);
    return "Saved";
  }
}

从json映射到java Obejct(申请人)后,由于“申请人”中没有性别getter/setter,因此将性别设置为null:

您需要使用:

      public String getGender() {
        return gender;
      }
    
      public void setGender(String gender) {
        this.gender = gender;
      }
插入:

      public String gender() {
        return gender;
      }

      public void gender(String gender) {
        this.gender = gender;
      }

从json映射到java Obejct(申请人)后,由于“申请人”中没有性别getter/setter,因此将性别设置为null:

您需要使用:

      public String getGender() {
        return gender;
      }
    
      public void setGender(String gender) {
        this.gender = gender;
      }
插入:

      public String gender() {
        return gender;
      }

      public void gender(String gender) {
        this.gender = gender;
      }
  • 请在您的POJO中添加性别设定者/获取者。那会解决你的问题

  • 我也可以看出你不确定你的请求机构。在这种情况下,在类级别(POJO)上添加“@JsonIgnoreProperties(ignoreUnknown=true)”注释,以便可以忽略未知字段

  • 还要在代码中定义MediaType(消费/生产)(我的意思是说您希望从用户那里得到什么样的请求)

  • 请在您的POJO中添加性别设定者/获取者。那会解决你的问题

  • 我也可以看出你不确定你的请求机构。在这种情况下,在类级别(POJO)上添加“@JsonIgnoreProperties(ignoreUnknown=true)”注释,以便可以忽略未知字段

  • 还要在代码中定义MediaType(消费/生产)(我的意思是说您希望从用户那里得到什么样的请求)