我的 Spring Boot 简单应用程序有问题。我创建了一本学生日记。我有将学生分配到小组的功能。我在 thymeleaf View 中创建,如下所示:
<form name="myForm" method="post">
<div class="row" id="groupList">
<div class="col-sm">
<div class="form-group blu-margin" th:object="${group}">
<select class="form-control" id="dropGroup">
<option value="0">Wybierz grupę : </option>
<option th:each="group : ${groupList}" th:value="${group.name}" th:text="${group.name}">
</option>
</select>
</div>
</div>
<div class="col-sm">
<div class="form-group blu-margin" th:object="${user}">
<select class="form-control" id="dropGroup">
<option value="0">Wybierz studenta : </option>
<option th:each="user : ${userListNew}" th:value="${user.firstName}" th:text="${user.firstName}+ ' ' +${user.lastName}">
</option>
</select>
</div>
</div>
<div class="col-sm">
<td><input name="submit" type="submit" value="submit" /></td>
</div>
</div>
</form>
我的模型类用户和组:
组:
@OneToMany(mappedBy = "group")
private List<User> users;
用户:
@ManyToOne
private Group group;
这是我的 Controller :
@RequestMapping(value = "/showGroupList", method = RequestMethod.GET)
public String showGroupList(Model model){
List<Group> groupList = groupRepository.findAll();
List<User> userList = userRepository.findAll();
Role userRole = roleRepository.findByName("ROLE_USER");
List<User> userListNew = new ArrayList<>();
for (User user : userList){
if (user.getRoles().contains(userRole)){
userListNew.add(user);
}
}
model.addAttribute("groupList", groupList);
model.addAttribute("userListNew", userListNew);
return "groupList";
}
现在,当我从列表中选择组和用户并单击“提交”时,出现以下错误:
WARN 1132 --- [nio-8070-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
我做错了什么?
最佳答案
这是您希望在表单中使用的方法的问题。您的错误是:
Request method 'POST' not supported
它清楚地表明您的应用程序不知道如何处理 Post 请求,并且您要求 POST 表单。在表单顶部,您要求 POST http 方法:
<form name="myForm" method="post">
但是在 Controller 层中您只指定 GET http 方法:
method = RequestMethod.GET
您可以通过执行以下两个选项之一来解决此问题:将表单更改为 Get,或在 Controller 中指定发送 POST 请求时要执行的操作。看看您的应用程序,我猜您想首先调用 GET 来获取列表,也许在提交时调用 POST - 但这是您喜欢的设计问题。
为了添加 POST Controller ,也许这样的方法可以工作:
@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity <String> persistGroup(@RequestBody Group group) {
groupRepository.save(group);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
您需要使用您的具体实现进行测试,以查看表单采用什么作为正文(可能不是组)并查看它转到哪个 URI(“/”可能不是正确的 URI)。这个想法是将组或用户保存到各自的存储库中。
关于java - Spring Boot保存将学生分配到一个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53691996/