我使用 lombok 来省略 java bean 的 getter 和 setter。 这是《Spring in Action 5 版》一书中的示例
Java Bean:
@Data
public class Taco {
@Size(min=1, message="You must choose at least 1 ingredient")
private List<String> ingredients;
}
Controller :
@PostMapping
public String processDesign(@Valid @ModelAttribute("design") Taco design, Errors errors, Model model) {
if (errors.hasErrors()) {
return "design";
}
System.out.println(design.getIngredients());
return "redirect:/orders/current";
}
渲染 View :
<form method="POST">
<input name="ingredients" type="checkbox" value="FLTO">
<span>Flour Tortilla</span><br>
<input name="ingredients" type="checkbox" value="GRBF">
<span>Ground Beef</span><br>
</form>
当我提交表单并且没有选中任何复选框时,验证不起作用,在 Controller 中,errors.hasErrors()
为 false,design.getIngredients()
为 null
然后我更改 java bean 中的代码:
private List<String> ingredients=new ArrayList<>();
验证有效,用户将收到消息:“您必须至少选择 1 种成分”
但我的问题是:即使我已经使用了 lombok,我是否应该实例化一个字段,尤其是对于引用字段?有没有办法使用注释来做到这一点?
最佳答案
您可以定义空构造函数并初始化其中的List
。 Lomboks 构造函数将被覆盖。
@Data
public class Taco {
@Size(min=1, message="You must choose at least 1 ingredient")
private List<String> ingredients;
public Taco() {
ingredients = new ArrayList<>()
}
}
关于java - 使用 lombok 时是否应该实例化一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56068921/