Я учусь использовать Spring Boot и Thymeleaf. У меня есть проблема, когда я предоставляю список определенных объектов в списке форм на странице Thymeleaf. Когда пользователь выбирает значения и публикует результаты, результатом является строка выбранных объектов, несовместимая с объектом, в котором я хотел сохранить значения.
Это может звучать как глоток, поэтому ниже приведен код.
Мой вопрос: есть ли способ гарантировать, что Thymeleaf возвращает список объектов?
Ввод: класс передает группу ингредиентов в форму
Этот класс передает в форму список класса Ingredient (фильтрация для этого не имеет значения - список вставляется в качестве значения атрибута модели, а ключ является типом ингредиента)
@GetMapping
public String showDesignForm(Model model) {
List<Ingredient> ingredients = new ArrayList<>();
ingredientRepo.findAll().forEach(i -> ingredients.add(i));
Type[] types = Ingredient.Type.values();
for (Type type : types) {
model.addAttribute(type.toString().toLowerCase(), filterByType (ingredients, type));
}
model.addAttribute("taco", new Taco());
return "design";
}
Thymeleaf берет этот список и отображает его в флажках
<!DOCTYPE html>
<html
xmlns:th="http://www.thymeleaf.org">
<head>
<title>Taco Cloud</title>
<link rel="stylesheet" th:href="@{/styles.css}" />
</head>
<body>
<h1>Design your taco!</h1>
<img th:src="@{/images/TacoCloud.png}"/>
<form method="POST" th:object="${taco}">
<div class="grid">
<div class="ingredient-group">
<h3>Designate your wrap:</h3>
<div th:each="ingredient : ${wrap}">
<input name="ingredients" type="checkbox" th:value="${ingredient}" />
<span th:text="${ingredient.name}">INGREDIENT</span><br/>
</div>
</div>
<div class="ingredient-group">
<h3>Pick your protein:</h3>
<div th:each="ingredient : ${protein}">
<input name="ingredients" type="checkbox" th:value="${ingredient}" />
<span th:text="${ingredient.name}">INGREDIENT</span><br/>
</div>
</div>
<div class="ingredient-group">
<h3>Choose your cheese:</h3>
<div th:each="ingredient : ${cheese}">
<input name="ingredients" type="checkbox" th:value="${ingredient}" />
<span th:text="${ingredient.name}">INGREDIENT</span><br/>
</div>
</div>
<div class="ingredient-group">
<h3>Determine your veggies:</h3>
<div th:each="ingredient : ${veggies}">
<input name="ingredients" type="checkbox" th:value="${ingredient}" />
<span th:text="${ingredient.name}">INGREDIENT</span><br/>
</div>
</div>
<div class="ingredient-group">
<h3>Select your sauce:</h3>
<div th:each="ingredient : ${sauce}">
<input name="ingredients" type="checkbox" th:value="${ingredient}" />
<span th:text="${ingredient.name}">INGREDIENT</span><br/>
</div>
</div>
</div>
<div>
<h3>Name your taco creation:</h3>
<input type="text" th:field="*{name}"/>
<br/>
<button>Submit your taco</button>
</div>
</form>
</body>
</html>
Целевой класс: ожидается, что возвращаемое значение будет List
package tacos;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Data;
@Data
public class Taco {
private Long id;
private Date createdAt;
@NotNull
@Size(min=5, message="Name must be at least 5 characters long")
private String name;
@Size(min=1, message="You must choose at least 1 ingredient")
private List<Ingredient> ingredients;
}
Ошибка:
Ошибка поля в объекте 'taco' на поле 'ингредиенты': отклоненное значение [Ингредиент (id = FLTO, имя = мука лепешка, тип = WRAP), Ингредиент (id = CHED, имя = Чеддер, тип = CHEESE)] ; коды [typeMismatch.taco.ingredients, typeMismatch.ingredients, typeMismatch.java.util.List, typeMismatch]; аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: codes [taco.ingredients, ингридиенты]; аргументы []; сообщение по умолчанию [ингредиенты]]; сообщение по умолчанию [Не удалось преобразовать значение свойства типа «java.lang.String []» в требуемый тип «java.util.List» для свойства «ингридиенты»; вложенное исключение - java.lang.IllegalStateException: невозможно преобразовать значение типа 'java.lang.String' в требуемый тип 'tacos.Ingredient' для ингредиентов свойства [0]: не найдено подходящих редакторов или стратегии преобразования]