我正在尝试让Jackson进行反序列化
{
"test": 2018
}
到
SomeJavaClass:
private final Test test
但是我想使用Lombok项目进行Test类。但是,Lombok使用ConstructorProperties注释了该类,由于某种原因,这使杰克逊失败了。
我的课程如下:
@Value
public class SomeJavaClass {
Test test;
}
@Value
public class Test{
String value;
}
测试被分解为:
public class Test {
int value;
@java.beans.ConstructorProperties({"value"})
public Test(final int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public boolean equals(final Object o) {
if (o == this) {
return true;
}
if (!(o instanceof Test)) {
return false;
}
final Test other = (Test) o;
if (this.getValue() != other.getValue()) {
return false;
}
return true;
}
public int hashCode() {
final int PRIME = 59;
int result = 1;
result = result * PRIME + this.getValue();
return result;
}
public String toString() {
return "Test(value=" + this.getValue() + ")";
}
}
是否可能使Jackson忽略某种构造函数属性?
答案 0 :(得分:1)
我还认为这里的问题不是注解@java.beans.ConstructorProperties({"value"})
。
根据您的delombok看来,您有一组注释,这些注释将阻止默认构造函数形成。
因此,也许您可以通过添加@NoArgsConstructor
来摆脱此问题。如果没有默认的构造函数并且没有@JsonCreator
,则会出现类似以下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException:无法 构造org.example.spring.jackson.JacksonTest $ TestClass的实例 (尽管至少存在一个创建者):无法从Object反序列化 价值(没有基于委托人或财产的创造者)
答案 1 :(得分:0)
失败的原因不是@ConstructorProperties
。实际上,必须使用此批注以使Jackson与Lombok的@AllArgsConstructor
一起工作。
这里的问题是JSON中test
的值是一个整数,但是您的类结构要求它是一个对象。因此,您必须将test
中的字段SomeJavaClass
设为int
。然后,您也不需要Test
类。 (或在value
中将test
重命名为Test
并摆脱SomeJavaClass
并反序列化为Test
。)