【发布时间】:2019-03-11 00:58:29
【问题描述】:
我是 Spring 和 Spring Boot 的新手,并且正在阅读一本充满缺失信息的书。
我有一个墨西哥卷饼课:
public class Taco {
...
@Size(min=1, message="You must choose at least 1 ingredient")
private List<Ingredient> ingredients;
...
}
如您所见,ingredients 是 List<Ingredient> 类型,这就是问题所在,它曾经是 List<String> 类型,但那是在我开始在数据库中保存数据之前,现在它必须是 List<Ingredient>这破坏了整个事情。
在控制器中,我有以下内容(除其他外,我认为这是解决手头问题所需的唯一代码,但如果您需要更多,请告诉我):
@ModelAttribute
public void addIngredientsToModel(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));
}
}
private List<Ingredient> filterByType(List<Ingredient> ingredients, Type type) {
return ingredients
.stream()
.filter(x -> x.getType()
.equals(type))
.collect(Collectors.toList());
}
最后在我的百里香文件中我有:
<span class="text-danger"
th:if="${#fields.hasErrors('ingredients')}"
th:errors="*{ingredients}">
</span>
导致错误的原因:
thymeleaf Failed to convert property value of type java.lang.String to required type java.util.List
再一次,当private List<Ingredient> ingredients; 是private List<String> ingredients; 时它可以工作,但现在它必须是private List<Ingredient> ingredients;,因为它在数据库中保存的方式但在这一点上坏了,如何修复它?
【问题讨论】:
-
您必须在表单中定义 th:object 以便 Thymeleaf 可以识别您的成分对象。
-
我遇到了类似的错误。从书中获得的代码可能不是没有bug的。
标签: spring-boot thymeleaf