【发布时间】:2020-04-28 01:26:32
【问题描述】:
我正在尝试将一个整数数组从我的 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 在控制器之间来回传递对象,或者是否有其他属性可以用来来回传递数组?
提前致谢
康纳
【问题讨论】:
标签: json spring spring-boot spring-mvc thymeleaf