Java 为什么我的表单没有在spring boot中传递信息

Java 为什么我的表单没有在spring boot中传递信息,java,hibernate,spring-boot,thymeleaf,Java,Hibernate,Spring Boot,Thymeleaf,您好,我正在表单中传递信息,一切正常,但当我填写表单时,它没有传递信息,我收到了这个错误 出现意外错误类型=内部服务器错误,状态=500。 原因:org.hibernate.exception.ConstraintViolationException:无法执行语句 原因:java.sql.SQLIntegrityConstraintViolationException:列“movie\u id”不能为null 我使用的代码如下所示: @PostMapping("/save") public St

您好,我正在表单中传递信息,一切正常,但当我填写表单时,它没有传递信息,我收到了这个错误

出现意外错误类型=内部服务器错误,状态=500。 原因:org.hibernate.exception.ConstraintViolationException:无法执行语句 原因:java.sql.SQLIntegrityConstraintViolationException:列“movie\u id”不能为null

我使用的代码如下所示:

@PostMapping("/save")
public String save(Movie movie) {
    savedMovie.save(movie);
    return "redirect:/LatestMovies";
}

我相信所有其他代码都是正确的,因为如果我试图呈现数据库信息,我没有问题

更新

这是完整的html代码

<div class="container">   
<table class="table table-hover">
    <tr>
        <th>Id</th>
        <th>Name</th>
    </tr>
    <tr th:each="LatestMovies : ${latestMovies}">
        <td th:text="${LatestMovies.id}"></td>
        <td th:text="${LatestMovies.movieName}"></td>
        <td>
       <form th:action="@{/save}" method="post" th:object="${newMovie}">
<p><input type="text" id="movie_id" th:field="*{movie_Id}"/></p>
<p><input type="text" id="movie_name" th:field="*{movie_Name}"/></p>
<p><input type="submit" value="save" /></p>
    </form>
</td>

    </tr>
</table>

您忘了用@RequestBody注释标记方法param。

您的控制器需要一个Movie对象,但它正在接收其他对象,然后生成一个空Movie对象。为了正确发送相应的类,您需要在表单中使用th:object。首先,让我们向控制器添加一个新的@ModelAttribute,这样表单就可以自动将电影对象映射到表单中

控制器

现在,让我们更改表单,以便它实际发送一个电影对象

<form th:action="@{/save}" method="post" th:object="${newMovie}">
    <p><input type="text" id="movie_id" th:field="*{movie_id}"/></p>
    <p><input type="text" id="movie_name" th:field="*{movie_name}"/></p>
    <p><input type="submit" value="save" /></p>
</form>
更新2

如果您希望将当前迭代的Thymeleaf列表放入表单中,那么可以执行以下操作

<div class="container">   
<table class="table table-hover">
   <tr>
      <th>Id</th>
      <th>Name</th>
   </tr>
   <tr th:each="LatestMovies : ${latestMovies}">
      <td th:text="${LatestMovies.id}"></td>
      <td th:text="${LatestMovies.movieName}"></td>
      <td>
          <form th:action="@{/save}" th:object="${LatestMovies}" method="post">
              <p><input type="hidden" th:value="*{id}"/></p>
              <p><input type="hidden" th:value="*{movieName}"/></p>
              <p><input type="submit" value="Submit"/></p>
          </form>
      </td>
   </tr>
</table>
这是因为您试图从窗体发送到控制器的电影对象未正确映射。这导致了movies表PK not null中的movie_id的约束,我猜尝试在其中插入一个not null值可能会违反该约束。如果希望前端页面表单中形成的对象绑定到java对象中,可以尝试以下方法

头版表格

当然,我假设你的对象有一个类似的结构,如下所示

电影课


正如错误所说,当您试图保存到数据库时,您的movie_id为null。检查movie_id为什么为nullass你可以看到我在表单中传递该字段的信息,如下图所示?公共字符串save@RequestParamMovie Movie{是,但改用@RequestBody。像这样吗?公共字符串save@RequestBody电影{有了这个错误,我现在遇到了一个意外的错误类型=不支持的媒体类型,状态=415。我喜欢你的答案,你刚刚让它工作了,我在过去3天里尝试了100种不同的方法。现在我在任何地方都没有见过这种方法,相信我3个答案说没有办法传递信息来自spring boot中没有javascript的表单。谢谢你的评论!我很高兴能为你提供帮助:抱歉,如果我再问你一点,但是…当我尝试向输入添加值时,它不接受它。我正在尝试这两种方法。而且

甚至输入一个常规信息,如value=123,并且输入一个预定义的值也不太容易d我的答案和额外的信息。让我知道它是否解决了你的询问。如果它解决了,一个升级投票将是非常好的:。一旦我得到了我的声誉高达15相信我,你会得到它。现在我确实更新了我的html代码到完整的一个。你的更新确实工作,但我想输入的信息是当前的一个thymeleaf list.thx的排列回答。我确实尝试过这种方法,但我现在确实使用了taglib,这可能是它不起作用的原因。现在我这么说。在你的方法中,我如何制作隐藏字段,这些字段是用以前的thymeleaf iterration的值输入的?
<form th:action="@{/save}" method="post" th:object="${newMovie}">
    <p><input type="text" id="movie_id" th:field="*{movie_id}"/></p>
    <p><input type="text" id="movie_name" th:field="*{movie_name}"/></p>
    <p><input type="submit" value="save" /></p>
</form>
@ModelAttribute(value = "newMovie")
public Movie newMovie() {
    Movie movie = new Movie();
    movie.setName("Test");
    return movie;
}
<div class="container">   
<table class="table table-hover">
   <tr>
      <th>Id</th>
      <th>Name</th>
   </tr>
   <tr th:each="LatestMovies : ${latestMovies}">
      <td th:text="${LatestMovies.id}"></td>
      <td th:text="${LatestMovies.movieName}"></td>
      <td>
          <form th:action="@{/save}" th:object="${LatestMovies}" method="post">
              <p><input type="hidden" th:value="*{id}"/></p>
              <p><input type="hidden" th:value="*{movieName}"/></p>
              <p><input type="submit" value="Submit"/></p>
          </form>
      </td>
   </tr>
</table>
<form:form action="save" modelAttribute="movie" method="POST">
    <form:label path = "movie_id"> Movie id</form:label>
    <form:input path="movie_id" name="movie_id">
    <form:label path = "movie_name"> Movie name</form:label>
    <form:input path="movie_name" name="movie_name">
    <button type="submit">save</button>
</form:form>
@PostMapping("/save")
public String save(@ModelAttribute("movie") Movie movie) {
savedMovie.save(movie);
return "redirect:/LatestMovies";
}
public class Movie{
  private String movie_id; // or int or long
  private String movie_name;
  //getters setters constructors ommitted
}