我的Spring Boot简单应用程序有问题。我创建学生的日记。我具有将学生分配到小组的功能。我在百里香视图中创建,如下所示:
<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;
这是我的控制器:
@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:已解决[org.springframework.web.HttpRequestMethodNotSupportedException:请求方法'POST'不支持”
我在做什么错了?
答案 0 :(得分:1)
这是您希望在表单中使用的方法的问题。您的错误是:
Request method 'POST' not supported
它清楚地表明您的应用程序不知道如何处理Post请求,因此您要求POST表单。在表单顶部,您要求POST http方法:
<form name="myForm" method="post">
但是,在控制器层中,您仅指定GET http方法:
method = RequestMethod.GET
您可以通过执行以下两个选项之一来解决此问题:将表单更改为Get,或在控制器中指定发送POST请求时的操作。查看您的应用程序,我想您想先调用GET来获取列表,然后在提交时进行POST-但这是您偏爱的设计问题。
为了添加POST控制器,也许像这样工作:
@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity <String> persistGroup(@RequestBody Group group) {
groupRepository.save(group);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
您将需要测试您的特定实现,以查看表单作为主体的形式(它可能不是Group),并查看去往哪个URI(“ /”可能不是正确的URI)。想法是将“组”或“用户”保存到它们各自的存储库中。
答案 1 :(得分:1)
首先,您需要HTML中的表单才能发送帖子,也可以使用jQuery
或JS
发送帖子,但这将给代码增加其他复杂性。添加表单后,您将需要添加一种方法来捕获该请求。
HTML
<form th:action="@{/assign-group}" th:object="${newUser}" method="post">
<select class="form-control" id="dropGroup" th:field="*{group.id}">
<option value="0">Wybierz grupę : </option>
<option th:each="selectedGroup : ${groupList}" th:value="${selectedGroup.id}" th:text="${group.name}">
</option>
</select>
<select class="form-control" id="dropGroup" th:field="*{id}">
<option value="0">Wybierz studenta : </option>
<option th:each="selectedUser : ${userList}" th:value="${selectedUser.id}" th:text="${user.name}">
</option>
</select>
<input name="submit" type="submit" value="submit" />
</form>
在这种形式下,您将发送一个用户实体,该用户实体的ID集和组ID也都被设置。还有一件事,您将看到我们正在使用th:object="${newUser}"
,这意味着我们需要在控制器中创建一个@ModelAttribute
,以便它将新用户返回到您的表单。
CONTROLLER
@ModelAttribute(value = "newUser")
public Store newUser() {return new User();}
@RequestMapping(value = "/assign-group", method = RequestMethod.POST)
public String assignGroup(@ModelAttribute("newUser") User user) {
// Fetch your the rest of the information using the id received.
// Fetch the group using the group's id received.
// Set this group to the fetched user.
}
如果您还有其他需要,请告诉我。