json - 使用 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 在控制器之间来回传递对象,或者是否有另一个属性可以用来来回传递数组?
提前致谢
康纳
解决方案
也许您应该将数字作为列表发送到控制器。
@PostMapping("/saveMovie")
public String saveMovie(@RequestBody List<Movie> movies){
movieService.function_name(movies);
return "movies";
}
另一种方法是使用AJAX调用控制器。只需要在 javascript 中收集数字作为列表,并通过 ajax 将数组作为 json 发送到控制器。在控制器中,您将解析它们
推荐阅读
- javascript - 我正在做一个切换,我想在切换功能触发时更改 div 的背景颜色变化
- reactjs - 想要在特定条件下显示标签
- gcc - Linux 的 Windows 子系统中的 GNU 汇编程序失败
- sql - 在 SQL 中查找每个部门员工的最高薪水
- android - 安卓工作室 | 无法运行新创建的项目
- java - 从 Tomcat 中的 context.xml 中检索资源的方法
- android - 如何在标签栏指示器中给出渐变线
- javascript - VueJS - 在异步调用 API 完成并加载所有 dom 后渲染所有组件
- android - 如何更改特定用户android的Firebase身份验证的电子邮件ID
- python - 如何在python上以彩色打印特定单词?