Java 绕过Json jackson和lombok构造函数要求
使用json保存和加载数据需要json的构造函数来加载对象,而我很难让lombok注释处理这个问题。我该怎么办 这是我的类在尝试使用注释构造我的项之前和之后的样子:Java 绕过Json jackson和lombok构造函数要求,java,json,jackson,annotations,lombok,Java,Json,Jackson,Annotations,Lombok,使用json保存和加载数据需要json的构造函数来加载对象,而我很难让lombok注释处理这个问题。我该怎么办 这是我的类在尝试使用注释构造我的项之前和之后的样子: @Data public class Item { //before private int id; private int amount; public Item(@JsonProperty("id") int id, @JsonProperty("amount") int amount) {
@Data
public class Item { //before
private int id;
private int amount;
public Item(@JsonProperty("id") int id, @JsonProperty("amount") int amount) {
this.id = id;
this.amount = amount;
}
}
我不想使用lombok的NoArgsConstructor注释,因为我不想为这个类使用无参数构造函数。我意识到我可以做到这一点:
private Item() {
}
但是希望有更好的方法…尝试将此添加到lombok配置文件中:
lombok.anyConstructor.addConstructorProperties=true
config.stopBubbling = true
因此,您的意思是Jackson不需要args构造函数来进行反序列化,您也不希望向类中添加任何args构造函数,因为这对您的模型不起作用 Lombok在这里是完全不相关的-无论是手动编写还是由Lombok生成,都没有区别,它仍然只是一个无参数构造函数 你真正的问题是-我能让Jackson在目标类上没有参数构造函数的情况下工作吗。这个问题已经有多种答案了,你几乎已经做到了。以下是必须做的事情:
@JsonCreator
注释添加到构造函数中@JsonProperty(“propName”)
添加到构造函数参数你做了第二个,但没有做第一个。添加它,这将解决您的问题。自lombok 1.18.4以来,您可以配置复制到构造函数参数的注释。将其插入
lombok.config
:
lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty
然后只需将@JsonProperty
添加到字段中:
@Data
@AllArgsConstructor
public class Item {
@JsonProperty("id")
private int id;
@JsonProperty("amount")
private int amount;
}
尽管注释参数看起来可能不必要,但实际上它们是必需的,因为在运行时构造函数参数的名称不可用。尝试使用
@allargsconstuctor(suppressConstructorProperties=true)
@YCF\L该方法不受欢迎try@allargsconstuctor(onstructor=@JsonCreator))
,另请参见,没有比这更好的方法了吗?在第一个代码示例中,通过将构造函数参数添加到示例2中的AllArgsConstructor中,是否无法像第一个代码示例中那样使用@jsonproperty注释构造函数参数?也就是说@AllArgsConstructor(ArgumentsAnotation=@JsonProperty)非常棒,允许您使用final
字段
@Data
@AllArgsConstructor
public class Item {
@JsonProperty("id")
private int id;
@JsonProperty("amount")
private int amount;
}