我有一个物体如下

 public class Employee{
  String firstName;
  String lastName;
  String address;
  String phoneNumber;
  List<Contacts> Contacts;

}

 public class Contacts{
  String name;
  String Address;
  String phoneNumber;
}


现在考虑将Employee对象设置为应用程序内部的值,当我尝试将对象转换为名称empObject(具有所有值)时,如下所示

ObjectMapper mapper= new ObjectMapper();
String employeeObjToJSON =mapper.writeValueAsString(empObject);
System.out.println("JSON employee Object" +employeeObjToJSON)


我得到了价值观

{"firstName":"Sawyer","lastName":"Ford","phone":"4555454553", "address": "SNJFJJFJ", "contacts":[{"phoneNumber": "122333"},{"phoneNumber":"122222"}]}


仅打印内部对象的电话号码。我应该如何在JSON中获取完整的对象

最佳答案

您的课程结构似乎有些偏离。为什么Employee类的联系人列表为String,而不是Contact对象列表?

我建议您像这样更改Employee类:

public class Employee {
  String firstName;
  String lastName;
  String address;
  String phoneNumber;
  List<Contact> contacts;
}

public class Contact {
  String name;
  String address;
  String phoneNumber;
}


使用这种类结构,使用ObjectMapper将它们映射到JSON应该没有任何问题。

编辑:
关于空字段没有显示的问题,正如我在评论中所写的那样,默认情况下,杰克逊应该序列化它们,并且您应该在响应中看到它们。

如果不是这种情况,则可能是该序列化功能已在某处被覆盖...请尝试将以下配置设置为对象映射器,并查看其是否有效:mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS)

另外,您也可以在Employee类和Contact类上使用Jackson注释@JsonInclude(JsonInclude.Include.ALWAYS),例如在他/她的答案中建议的ibenjelloun。

10-05 23:07
查看更多