Spring JDBC 无法插入
Posted
技术标签:
【中文标题】Spring JDBC 无法插入【英文标题】:Spring JDBC Unable to insert 【发布时间】:2021-09-04 10:45:33 【问题描述】:我是 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 + '\'' +
'';
【问题讨论】:
在调用 API 时,您是否将Content type
正确设置为 application/json
?
是的,我做到了。我认为问题可能与学生班级有关,因为 ID 是自动递增的。我之前插入了 ID,它工作正常。
还要检查你的插入查询字符串连接,我认为)
和VALUES
之间应该有一个空格。
我试过了,还是不行。
【参考方案1】:
我认为您的休息呼叫甚至没有到达 jdbc 部分,因为您的休息请求存在问题。我相信您没有正确设置内容类型。尝试进行以下更改并查看。
发送请求时请将'Content-Type'
header 属性设置为'application/json'
并增强您的以下处理程序方法所消耗的内容。
@PostMapping(path="/NewStudent", consumes="application/json")
public void registerNewStudent(@RequestBody StudentClass studentClass)
studentService.addNewStudent(studentClass);
尝试调试您的应用程序。你的 rest 调用应该到达你上面的处理方法。
【讨论】:
我试过了,但没有帮助。在我制作 ID AutoIncrement 之前它就可以工作了。以上是关于Spring JDBC 无法插入的主要内容,如果未能解决你的问题,请参考以下文章