【发布时间】:2017-10-30 13:23:03
【问题描述】:
对于某些用例,我需要将一个 POJO 转换为具有不同字段名称的另一个 POJO。我尝试使用杰克逊对象映射器。它在某些方面起作用。然而最终结果并不是我所期望的。
public class JacksonTest {
public static void main(String[] args) throws IOException{
ObjectMapper mapper = new ObjectMapper();
User user = new User("Deepak", "111", "Singapore");
UserMap newUser = mapper.convertValue(user, UserMap.class);
System.out.println("SOUT: " + newUser);
System.out.println("Jackson: " + mapper.writeValueAsString(newUser));
}
}
class User {
User(String name, String id, String address){
this.name = name;
this.id = id;
this.address = address;
}
String name;
String id;
String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
class UserMap implements Serializable {
@JsonProperty("name")
String name;
private Map<String, Object> meta = new HashMap<>();
@JsonAnyGetter
public Map<String, Object> any() {
return meta;
}
@JsonAnySetter
public void set(String name, Object value) {
meta.put(name, value);
}
@Override
public String toString() {
return "UserMap{" +
"name_new='" + name + '\'' +
", meta=" + meta.keySet().stream().map(x-> x+ ":: "+ meta.get(x)).collect(Collectors.joining(", ")) +
'}';
}
}
如果你运行,输出将是:
SOUT: UserMap{name_new='Deepak', meta=address:: Singapore, id:: 111}
杰克逊:{"name":"Deepak","address":"Singapore","id":"111"}
我正在使用内部使用杰克逊序列化程序的 Springboot。它将 newUser 对象再次转换为普通用户类。我想以类构造的方式序列化字符串。我想要 SOUT 格式的输出。
【问题讨论】:
标签: java json spring-boot jackson objectmapper