Я пытаюсь передать массив целых чисел из моего 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;
Затем в моем В данном случае я отображаю некоторые значения и скрываю идентификаторы, которые мне не нужны, чтобы передать их обратно моему контроллеру:
<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 или есть другой атрибут, который я могу использовать для передачи массива туда-сюда?
Заранее спасибо
Конор