首页 > 解决方案 > Spring JDBC 无法插入

问题描述

我是 SpringBoot 的新手,我正在使用 SpringBoot 和 JDBC 来制作 API。INSERT 无法正常工作,我已将 ID 设为唯一并自动递增。在我插入 ID 之前,它没有引起任何问题。我使用 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();
    }


}

学生道

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 + '\'' +
                '}';
    }
}

标签: mysqlspringspring-bootspring-jdbc

解决方案


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

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

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

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

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


推荐阅读