默认

  1. 调用POJO的无参构造函数,构造一个java对象
  2. 为每一个成员变量调用setter进行赋值。

默认情况下,使用Jackson做反序列化时,必须有public无参构造函数,必须有成员变量的set方法。

@JsonCreator注解

加在构造方法上

使用@JsonProperty("json字段名")定义构造函数的参数。

1
2
3
4
5
6
7
8
9
10
11
public class User {
private String name;
private int age;
@JsonCreator
public User(@JsonProperty("name") String name,
@JsonProperty("age") Integer age) {
this.name = name;
this.age = age;
}
//getter
}

加在工厂静态方法上

1
2
3
4
5
6
7
@JsonCreator
public static User createUser(@JsonProperty("name") String name,@JsonProperty("age") Integer age){
User user = new User();
user.name = name;
user.age = age;
return user;
}

@ConstructorProperties注解

@ConstructorProperties只能加在构造方法上,使用更方便

1
2
3
4
5
6
7
8
9
10
public class User {
private String name;
private int age;
@ConstructorProperties({"name", "age"})
public User(String name,
int age) {
this.name = name;
this.age = age;
}
}