首页 > 解决方案 > 使用 Thymeleaf 和 SpringBoot 将我的 HTML 中的整数数组传递给控制器

问题描述

我正在尝试将一组整数从我的 HTML 传递回我的控制器。

我的流程如下:

我正在从 API 检索数据并将其转换为实体。一切正常。但是,我将它传递给我的 HTML(Thymeleaf)并向用户显示一些值。

然后他们选择其中一个选项并将其传递回我的控制器。正是在这个阶段,我丢失了我需要的数据。

在我的实体中,我得到了传递给视图的以下数据(下面的示例):

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "MOVIE_ID")
private long movieId;

@JsonProperty("title")
@Column(name = "TITLE")
private String title;

@JsonProperty("overview")
@Column(name = "OVERVIEW", length = 2000)
private String overview;

@JsonProperty("popularity")
@Column(name = "POPULARITY")
private float popularity;

@JsonProperty("release_date")
@Column(name = "RELEASE_DATE")
private String releaseDate;

@JsonProperty("genre_ids")
private int[] genreIds;

然后在我看来,我显示一些值并隐藏我不需要显示的 id,以便我可以将它们传递回我的控制器:

        <form action = "#" th:action="@{/saveMovie}" method="post" th:object="${movie}">
        <tr>
            <td th:text="${movie.title}"></td>
            <td th:text="${movie.releaseDate}"></td>
            <td th:text="${movie.overview}"></td>
            <input type="hidden" id="title" name="title" th:value="*{title}"/>
            <input type="hidden" id="overview" name="overview" th:value="*{overview}"/>
            <input type="hidden" id="popularity" name="popularity" th:value="*{popularity}"/>
            <input type="hidden" id="releaseDate" name="releaseDate" th:value="*{releaseDate}"/>
            <input type="hidden" id="genreIds" name="genreIds" th:value="*{genreIds}"/>
            <td>
                <div class="col-auto">
                    <button class="btn btn-primary" type="submit">Add</button>
                </div>
            </td>
        </tr>
        </form>

处理呼叫的控制器:

@PostMapping("/saveMovie") public String saveMovie(@ModelAttribute(value = "movie") Movie movie)

更新*** 添加当前与此页面交互的 GET/POST 控制器:

@GetMapping("/searchMovie")
public String searchMovie(final Model model){

    List<Movie> returnedMovies = new ArrayList<>();

    model.addAttribute("movies", returnedMovies);

    return "Search";
}


@PostMapping("/searchMovie")
public String searchMovieInTMDB(@RequestParam(value = "movieName", required = true) String movieName,
                                Model model){

    List<Movie> returnedMovies = service.searchMovies(movieName);

    model.addAttribute("movies", returnedMovies);

    return "Search";
}

@PostMapping("/saveMovie")
public String saveMovie(@ModelAttribute(value = "movie") Movie movie){

    service.storeMovie(movie);

    return "WORK_IN_PROGRESS";
}

但是,当我将值传递回控制器时,我得到了转换错误:

[Failed to convert property value of type 'java.lang.String' to required type 'int[]' for property 'genreIds']

我已将其更改为 String[] 以测试此功能并且错误消失了,但随后我遇到了另一个问题,即它被转换为: String Value Image

我发现传递对象的唯一方法是使用输入标签并隐藏它们。它可以很好地转换浮点数,但不能处理整数数组。

有没有更好的方法可以使用 Thymeleaf 在控制器之间来回传递对象,或者是否有另一个属性可以用来来回传递数组?

提前致谢

康纳

标签: jsonspringspring-bootspring-mvcthymeleaf

解决方案


也许您应该将数字作为列表发送到控制器。

@PostMapping("/saveMovie")
public String saveMovie(@RequestBody List<Movie> movies){
    movieService.function_name(movies);
    return "movies";
}

另一种方法是使用AJAX调用控制器。只需要在 javascript 中收集数字作为列表,并通过 ajax 将数组作为 json 发送到控制器。在控制器中,您将解析它们


推荐阅读