package tacos.web;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import java.lang.reflect.Field;
import lombok.extern.slf4j.Slf4j;
import tacos.Ingredient;
import tacos.Ingredient.Type;
import tacos.Taco;
@Slf4j
@Controller
@RequestMapping("/design")
@SessionAttributes("tacoOrder")
public class DesignTacoController {
@ModelAttribute
public void addIngredientsToModel(Model model) {
List<Ingredient> ingredients = Arrays.asList(
new Ingredient("FLTO", "Flour Tortilla", Type.WRAP),
new Ingredient("COTO", "Corn Tortilla", Type.WRAP),
new Ingredient("GRBF", "Ground Beef", Type.PROTEIN),
new Ingredient("CARN", "Carnitas", Type.PROTEIN),
new Ingredient("TMTO", "Diced Tomatoes", Type.VEGGIES),
new Ingredient("LETC", "Lettuce", Type.VEGGIES),
new Ingredient("CHED", "Cheddar", Type.CHEESE),
new Ingredient("JACK", "Monterrey Jack", Type.CHEESE),
new Ingredient("SLSA", "Salsa", Type.SAUCE),
new Ingredient("SRCR", "Sour Cream", Type.SAUCE)
);
Type[] types = Ingredient.Type.values();
for (Type type : types) {
model.addAttribute(type.toString().toLowerCase(),
filterByType(ingredients, type));
}
}
@GetMapping
public String showDesignForm(Model model) {
model.addAttribute("taco", new Taco());
return "design";
}
private Iterable<Ingredient> filterByType(
List<Ingredient> ingredients, Type type) {
return ingredients
.stream()
.filter(x -> x.getType().equals(type))
.collect(Collectors.toList());
}
}
我正在阅读《Spring in Action》这本书的第 6 章。在 filterByType 方法中,“.getType()”显示错误
The method getType() is undefined for the type Ingredient
我以为这是lombok导致的错误,但我也安装了它。我还导入了包“java.lang.reflect.Field”,但仍然收到错误。
package tacos;
import lombok.Data;
@Data
public class Ingredient {
public Ingredient(String string, String string2, Type wrap) {
// TODO Auto-generated constructor stub
}
private final String id = "";
private final String name = "";
private final Type type = null;
public enum Type {
WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
}
}
上面的类是成分类
看来您不是第一个遇到此问题的人https://coderanch.com/t/730026/java/lombok
答案:在 DesignTacoController 类的 addIngredientsToModel 中,标记了 错误是“构造函数 Ingredient(String, String, Ingredient.Type) 未定义”。此外,在方法 filterByType 中,标记的错误是“The 方法 getType() 对于 Ingredient 类型未定义”。它出现 那个龙目岛就是不工作。但我的 pom 中有 lombok:
仅添加 Lombok 作为依赖项并不能让 Eclipse 识别它, 你需要一个插件。请参阅https://www.baeldung.com/lombok-ide 有关将 Lombok 安装到 Eclipse(以及 IntelliJ for 那些喜欢它的人)。
public class Ingredient {
private final String id;
private final String name;
private final Type type;
public Ingredient(String id, String name, Type type) {
this.id = id;
this.name = name;
this.type = type;
}
public enum Type {
WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
}
*public Type getType() {
return this.type;
}*
}