我应该在使用 lombok 时实例化一个字段吗?
Should I instantiate a field when I use lombok
我使用 lombok 省略了 java bean 的 getter 和 setter。
这是书中的一个例子 "Spring in Action 5 edition"
一个java豆:
@Data
public class Taco {
@Size(min=1, message="You must choose at least 1 ingredient")
private List<String> ingredients;
}
控制器:
@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";
}
渲染视图:
<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>
当我提交表单并且没有选中复选框时,验证不起作用,在控制器中,errors.hasErrors()
为 false,design.getIngredients()
为 null
然后我更改 java bean 中的代码:
private List<String> ingredients=new ArrayList<>();
验证有效,用户将收到消息:"You must choose at least 1 ingredient"
但我的问题是:即使我已经使用了 lombok,我是否应该实例化一个字段,尤其是对于引用字段?有没有办法使用注释来做到这一点?
您可以定义 nullary 构造函数并在其中初始化 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<>()
}
}
我使用 lombok 省略了 java bean 的 getter 和 setter。 这是书中的一个例子 "Spring in Action 5 edition"
一个java豆:
@Data
public class Taco {
@Size(min=1, message="You must choose at least 1 ingredient")
private List<String> ingredients;
}
控制器:
@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";
}
渲染视图:
<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>
当我提交表单并且没有选中复选框时,验证不起作用,在控制器中,errors.hasErrors()
为 false,design.getIngredients()
为 null
然后我更改 java bean 中的代码:
private List<String> ingredients=new ArrayList<>();
验证有效,用户将收到消息:"You must choose at least 1 ingredient"
但我的问题是:即使我已经使用了 lombok,我是否应该实例化一个字段,尤其是对于引用字段?有没有办法使用注释来做到这一点?
您可以定义 nullary 构造函数并在其中初始化 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<>()
}
}