java - 使用 lombok 时是否应该实例化一个字段

标签 java spring spring-mvc lombok

我使用 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/

相关文章:

java - Spring MVC : Testing particular annotated method gets invoked

java - 通过 ServletContextListener 中的 SimpMessagingTemplate 向所有客户端发送消息

java - 使用jpcap读取数据包头

android - Spring Boot 上的 Controller 415 不支持的媒体类型

java - Spring 从 Http 重定向到 Https 中断 Rest Controller 测试

java - 如何使用 spring 正确管理 PathVariables

java - Java 对继承方法的反射(reflection)在 Windows 和 Linux 中是否不同?

java - 从 Java 以编程方式创建 Mysql 结构

java - 如何在 Java 中手动配置数据源?

java - 如何使用 View 解析器返回移动或普通 View ?