我正在练习 Spring/Thymeleaf 并面临一个问题 我创建了一个 PUT 请求进行编辑,但它通过创建新数据充当 POST
这是我的代码 控制器
// imports
@Autowired
private UniversityService universityService;
// More codes
@PutMapping("/universities/{id}/edit")
public String editUniversity(
@Valid @ModelAttribute("thisUniversity") University updatedUniversity,
BindingResult result,
@PathVariable Long id) {
if(result.hasErrors()) {
return "editUniversity";
}
universityService.updateUniversity(updatedUniversity);
return "redirect:/";
}
服务
// imports
@Service
public class UniversityService {
@Autowired
private UniversityRepo universityRepo;
// Add a university
public University createUniversity (University newUniversity) {
return universityRepo.save(newUniversity);
}
// More codes
public University updateUniversity(University updatedUniversity) {
return universityRepo.save(updatedUniversity);
}
}
HTML
<!DOCTYPE html>
<1-- head -->
<form th:taction="@{'/universities/'+${thisUniversity.universityId}+'/edit'}" th:object="${thisUniversity}" th:method="POST">
<!-- The below tag is required for PUT/DELETE request -->
<input type="hidden" name="_method" value="PUT">
// HTML elements
<input type="submit" value="Save University">
</form>
我在 application.properties 文件中也有
spring.mvc.hiddenmethod.filter.enabled=true
我已经尝试在表单标签中使用
th:method="PUT"
或不包含<input type="hidden" name="_method" value="PUT">
但结果还是一样
您将 id 作为路径变量,但没有将其提供给更新的对象,这就是为什么它被保存到新对象而不是编辑现有对象。