Spring JDBC 无法插入

Spring JDBC Unable to insert

我是 SpringBoot 的新手,我正在使用带有 JDBC 的 SpringBoot 来制作 API。 INSERT 无法正常工作,我已将 ID 设置为唯一并自动增加它。在我插入 ID 之前,它导致没有 problems.I 正在使用 MySql 作为数据库。

我在POST中使用的JSON是:

{
    "name":"Name",
    "email":"namegmail.com",
    "dob":"2000-04-09",
    "age":21
}

我遇到了这个错误。

{
    "timestamp": "2021-06-20T13:10:16.925+00:00",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'application/octet-stream' not supported",
    "path": "/api/v1/NewStudent"
}

控制器

@RestController
@RequestMapping(path = "api/v1/")
public class StudentController {

    private StudentService studentService;

    @Autowired
    public StudentController(StudentService service){
        this.studentService=service;
    }


    @GetMapping("/home")
    public String getHome(){
        return "Hey Welcome to Home";
    }

    @PostMapping("/NewStudent")
    public void registerNewStudent(@RequestBody StudentClass studentClass){
        studentService.addNewStudent(studentClass);
    }

    @GetMapping("/student/{id}")
    public StudentClass getStudentSearch(@PathVariable(value = "id") Long userId){

        return studentService.getStudentSelect(userId);
    }

    @GetMapping("/AllStudents")
    public List<StudentClass> getAllStudents(){

        return studentService.getAllStudents();
    }


}

StudentDao

public class StudentDaoClass implements StudentDao{

    @Autowired
    private JdbcTemplate jdbctemplate;
    private List<StudentClass> selectAll;

    @Override
    public int insert(StudentClass student) {

        String query="INSERT INTO Student(std_name,std_email,std_dob,std_age)" +
                "VALUES(?,?,?,?)";
        int res=this.jdbctemplate.update(query,student.getName(),student.getEmail(),student.getDob(),student.getId());
        return res;
    }

    @Override
    public StudentClass selectStudent(Long id) {

        String query="SELECT * FROM Student WHERE std_id=?";
        RowMapper<StudentClass> rowMapper=new RowMapperClass();
        StudentClass studentClass=this.jdbctemplate.queryForObject(query,rowMapper,id);

        return studentClass;
    }

    @Override
    public List<StudentClass> selectAllStudents() {

        String query="SELECT * FROM Student";
        selectAll=this.jdbctemplate.query(query,new RowMapperClass());
        return selectAll;
    }

    public JdbcTemplate getJdbctemplate() {
        return jdbctemplate;
    }

    public void setJdbctemplate(JdbcTemplate jdbctemplate) {
        this.jdbctemplate = jdbctemplate;
    }
}

学生班级

public class StudentClass {
    
    @Id
    private Long id;
    private String name;
    private LocalDate dob;
    private Integer age;
    private String email;

    public StudentClass() {
    }

    public StudentClass(String name, String email,LocalDate dob ,Integer age) {
        this.name = name;
        this.dob = dob;
        this.age = age;
        this.email = email;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public LocalDate getDob() {
        return dob;
    }

    public void setDob(LocalDate dob) {
        this.dob = dob;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "StudentClass{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", dob=" + dob +
                ", age=" + age +
                ", email='" + email + '\'' +
                '}';
    }
}

我认为你的休息电话甚至没有到达 jdbc 部分,因为你的休息请求有问题。我相信您没有正确设置 content-type 。尝试进行以下更改并查看。

发送请求时请将'Content-Type'header属性设置为'application/json'

并增强您的以下处理程序方法所消耗的内容。

@PostMapping(path="/NewStudent", consumes="application/json")
public void registerNewStudent(@RequestBody StudentClass studentClass){
    studentService.addNewStudent(studentClass);
}

尝试调试您的应用程序。您的休息电话应该到达您上面的处理程序方法。