NotNull 注释阻止在 Spring Boot 应用程序中构建

问题描述 投票:0回答:1

我正在尝试运行一个 Spring Boot 应用程序。 我有一个模型类(Category)和一个服务类(CategoryService) 对应型号

类别.java

@Data
@Entity
public class Category implements Serializable {

    @Id
    @GeneratedValue
    private Integer id;

    @NotNull
    private String categoryName;

    @NotNull
    private Integer totalResourceCount;

    @NotNull
    private Integer categoryValue;

    @Column(updatable = false, nullable = false)
    private Timestamp createdDate;

    @NotNull
    private Timestamp updatedDate;
}

CategoryService.java

@Service
public class CategoryService {

    @Autowired
    CategoryRepository categoryRepository;

    public List<CategoryDTO> getAllCategories() {
        List<CategoryDTO> categoryDTOList = new ArrayList<>();
        List<Category> categories = categoryRepository.findAll(Sort.by("createdDate"));
        if (categories != null) {
            categories.forEach(category -> {
                CategoryDTO categoryDTO = new CategoryDTO();
                categoryDTO.setCategoryId(category.getId());
                categoryDTO.setCategoryName(category.getCategoryName());
                categoryDTO.setTotalResourceCount(category.getTotalResourceCount());
                categoryDTO.setCategoryValue(category.getCategoryValue());
                categoryDTOList.add(categoryDTO);
            });
        }
        return categoryDTOList;
    }

    public void createCategory(CategoryDTO categoryDTO) {
        Category category = new Category();
        category.setCategoryName(categoryDTO.getCategoryName());
        category.setCategoryValue(categoryDTO.getCategoryValue());
        category.setTotalResourceCount(0);
        category.setCreatedDate(DateUtil.getCurrentTimestamp());
        category.setUpdatedDate(DateUtil.getCurrentTimestamp());
        categoryRepository.save(category);
    }
}

当我尝试构建项目时,我收到以下错误

CategoryService.java:[37,29] constructor Category in class Category cannot be applied to given types;
[ERROR]   required: java.lang.String
[ERROR]   found:    no arguments
[ERROR]   reason: actual and formal argument lists differ in length

我知道该错误是由于实例化 Category 类而没有在构造函数中传递

@NotNull
字段造成的。所以我删除了
@NotNull
注释并且构建成功。然而,这是不希望的,因为
@NotNull
注释与字段验证有一些联系。

除了删除

@NotNull
注释之外,解决此问题的正确方法是什么? 我是否需要在 Category 模型中声明一个构造函数类,然后通过传递所有
@NotNull
的字段值来初始化 Category 实例?

java spring spring-boot lombok
1个回答
0
投票

@Data
包含
@RequiredArgsConstructor
,因此将生成包含所有
@NotNull
带注释的属性的构造函数。

如果你还想使用无参构造函数,则必须添加

@NoArgsConstructor

@Data
@NoArgsConstructor
@Entity
public class Category implements Serializable {

    @Id
    @GeneratedValue
    private Integer id;

    @NotNull
    private String categoryName;

    @NotNull
    private Integer totalResourceCount;

    @NotNull
    private Integer categoryValue;

    @Column(updatable = false, nullable = false)
    private Timestamp createdDate;

    @NotNull
    private Timestamp updatedDate;
}

现在生成代码包含两个构造函数

© www.soinside.com 2019 - 2024. All rights reserved.