java - Spring Boot保存将学生分配到一个组

标签 java spring spring-boot thymeleaf

我的 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/

相关文章:

java - native 查询抛出 InvalidDataAccessApiUsageException

java - 为什么 Hibernate 模式验证无法验证模式

java - 当类路径包含许多目录时,类路径根是什么意思?

serialization - Spring-data-redis @Cacheable java.lang.ClassCastException : java. util.HashMap 无法转换为 java.lang.String

Java:我可以有一个具有 3 个数组列表作为其值的 Map 吗?

java - 编译 Android 应用程序时第 3 方库依赖项上的 NoClassDefFoundError

java - 如何在给定的包中找到带注释的方法?

java - 替换字符串中的字符,Java

java - Spring web mvc 示例,引导,创建名称为 'jacksonObjectMapperBuilder' 的 bean 时出错

java - Spring Boot 无法处理自定义 JPA 请求