使用lombok时应该实例化字段

时间:2019-05-09 23:43:17

标签: java spring spring-mvc lombok

我用lombok省略了Java bean的getter和setter方法。 这是《 Spring in Action 5 Edition》一书中的一个例子

一个Java bean:

@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()为假,design.getIngredients()null

然后我更改java bean中的代码:

  private List<String> ingredients=new ArrayList<>();

验证成功,用户将收到消息:“您必须选择至少一种成分”

但是我的问题是:即使我已经使用过lombok,也应该实例化一个字段,尤其是对于参考字段吗?是否可以使用注释来做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以定义null构造函数,并在其中初始化public void showHideCardPreview(int id) { FragmentManager fm = getSupportFragmentManager(); Bundle b = new Bundle(); b.putInt(Constants.CARD, id); cardPreviewFragment.setArguments(b); FragmentTransaction ft = fm.beginTransaction() .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); if (!cardPreviewFragment.isAdded()){ ft.add(R.id.full_screen_container, cardPreviewFragment); ft.show(cardPreviewFragment); } else { if (cardPreviewFragment.isHidden()) { Log.d(TAG,"++++++++++++++++++++ show"); ft.show(cardPreviewFragment); } else { Log.d(TAG,"++++++++++++++++++++ hide"); ft.hide(cardPreviewFragment); } } ft.commit(); } 。龙目岛构造函数将被覆盖。

List