我是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;
,但是现在它中断了,如何解决吗?
答案 0 :(得分:2)
我遇到了同样的问题,我们这里需要一个转换器。
package tacos.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import tacos.Ingredient;
import tacos.data.IngredientRepository;
@Component
public class IngredientByIdConverter implements Converter<String, Ingredient> {
private IngredientRepository ingredientRepo;
@Autowired
public IngredientByIdConverter(IngredientRepository ingredientRepo) {
this.ingredientRepo = ingredientRepo;
}
@Override
public Ingredient convert(String id) {
return ingredientRepo.findOne(id);
}
}
答案 1 :(得分:0)
对以上伊恩答案的优化:
在转换器的构造函数中获取成分。
# packageA/package.json
{
"name": "packageA",
"version": "2.0.0,"
}