Spring MVC SpringMVC PUT请求编辑数据,但得到了一个新的

3duebb1j  于 8个月前  发布在  Spring
关注(0)|答案(1)|浏览(51)

我正在练习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">,但结果仍然相同

d8tt03nd

d8tt03nd1#

您将id作为路径变量,但没有将其提供给更新的对象,这就是为什么它会保存到新对象中,而不是编辑现有对象。

相关问题