springmvc和@data注解

l2osamch  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(291)

我正在使用 SpringToolSuite as-ide及其开发应用 Spring MVC .
在应用程序的模型部分,我定义了一个名为component的bean

import lombok.Data;

@Data
public class Ingredient {

    public Ingredient(String string, String string2, Type wrap) {
        // TODO Auto-generated constructor stub
    }
    private String id;
    private String name;
    private Type type;
    public enum Type{
        WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
    }

}

当我使用 @Data 来自lombok的注解我可以假设一个采用这3个属性的构造函数是自动创建的,还有getter和setter。
但就像我呼叫的控制器一样 new Ingredient("FLTO", "Flour Tortilla", Type.WRAP) 我在指令下面得到了一条红线,其中有一条消息告诉我没有带参数的构造函数。
我不明白,因为这个类的成分是用Lombok山的注解标记的 @Data 这些错误导致springboot项目的运行崩溃

Caused by: java.lang.Error: Unresolved compilation problems: 
    The method asList(T...) in the type Arrays is not applicable for the arguments (Ingredient, Ingredient, Ingredient, Ingredient, Ingredient, Ingredient, Ingredient, Ingredient, Ingredient, Ingredient)
    The constructor Ingredient(String, String, Ingredient.Type) is undefined
.........................
kqhtkvqz

kqhtkvqz1#

@Data 文档

Equivalent to @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode.

因为您的字段没有标记为 final 他们不在保险范围内 @RequiredArgsConstructor 因此
将必填字段声明为 final
使用 @AllArgsConstructor 编辑

@Data
public class Ingredient {
    private final String id;
    private final String name;
    private final Type type;
    public enum Type{
        WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
    }

}

被禁烟到:

@Data
public class Ingredient {
    private final String id;
    private final String name;
    private final Type type;

    @java.beans.ConstructorProperties({"id", "name", "type"})
    public Ingredient(String id, String name, Type type) {
        this.id = id;
        this.name = name;
        this.type = type;
    }
....
}

然后我可以用

Ingredient test = new Ingredient("id", "name", Ingredient.Type.CHEESE);
6rqinv9w

6rqinv9w2#

@Data 注解为注解创建构造函数
@RequiredArgsConstructor @RequiredArgsConstructor 为未初始化的最终字段或带注解的字段创建构造函数 @NonNull . 你的领域不是 final 也不是 @NonNull 因此建造师 Ingredient(String, String, Ingredient.Type) 未生成
如果你想生成所有参数,我会添加 @AllArgsConstructor 否则必须满足上述条件

dsekswqp

dsekswqp3#

我在ide中尝试了你的代码,没有错误。
确保在ide中启用了注解处理。如果你正在使用gradle,确保你有 annotationProcessor 为了 lombok 在正确的地方。
构造函数不是使用数据自动创建的。使用 @RequiredArgsConstructor 将根据所需字段生成构造函数( final 字段)。

相关问题