Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 转换地图<;字符串,字符串>;为嵌套属性键创建POJO_Json_Jackson_Gson - Fatal编程技术网

Json 转换地图<;字符串,字符串>;为嵌套属性键创建POJO

Json 转换地图<;字符串,字符串>;为嵌套属性键创建POJO,json,jackson,gson,Json,Jackson,Gson,我需要将地图转换为POJO。我参考了下面的链接,对于简单的键(employeeId,firstName,lastName),它可以正常工作 对于关联(有线)密钥(department.departmentId、department.departmentName),它不起作用 import com.fasterxml.jackson.databind.DeserializationFeature; 导入com.fasterxml.jackson.databind.ObjectMapper; 公营

我需要将地图转换为POJO。我参考了下面的链接,对于简单的键(employeeId,firstName,lastName),它可以正常工作

对于关联(有线)密钥(department.departmentId、department.departmentName),它不起作用

import com.fasterxml.jackson.databind.DeserializationFeature;
导入com.fasterxml.jackson.databind.ObjectMapper;
公营雇员{
私人国际雇员ID;
私有字符串名;
私有字符串lastName;
私人部门,;
公共静态void main(字符串[]args){
映射输入=constructMap();
最终ObjectMapper映射器=新ObjectMapper();
//禁用(反序列化功能。在未知属性上失败);
final Employee=mapper.convertValue(输入,Employee.class);
系统输出打印项次(员工);
}
私有静态映射constructMap(){
Map obj=新的HashMap();
对象put(“雇员ID”、“1”);
obj.put(“名字”、“名字”);
对象put(“姓氏”、“姓氏”);
//obj.put(“部门ID”、“123”);
//obj.put(“部门名称”、“物理”);
返回obj;
}
}//员工类结束
公共课系{
私人int部门ID;
私有字符串departmentName;
}
映射的键和值是字符串,这是我从其他函数得到的。将有多个嵌套属性键,如department.departmentId或
address.addressId

您不需要使用
部门.departmentId
部门.departmentName
。而不是这样做,您必须在
部门.class
上调用第二个
convertValue
。之后,您可以将创建的
部门
设置为您的
员工

主要

public class Department
{
    private int departmentId;
    private String departmentName;

    public int getDepartmentId()
    {
        return departmentId;
    }

    public void setDepartmentId(int departmentId)
    {
        this.departmentId = departmentId;
    }

    public String getDepartmentName()
    {
        return departmentName;
    }

    public void setDepartmentName(String departmentName)
    {
        this.departmentName = departmentName;
    }
}

运行时,在线程“main”java.lang.IllegalArgumentException:无法识别的字段“department.departmentId”中获取此错误异常
public static void main(String[] args)
{
    Map<String,Object> input = constructMap();
    ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Employee employee = mapper.convertValue(input, Employee.class);
    Department department = mapper.convertValue(input, Department.class);
    employee.setDepartment(department);
    System.out.println(employee);
}

    private static Map<String, Object> constructMap()
    {
        Map<String, Object> obj = new HashMap<>();
        obj.put("employeeId", "1");
        obj.put("firstName", "firstName");
        obj.put("lastName", "lastName");
        obj.put("departmentId", "123");
        obj.put("departmentName", "Physics");

        return obj;
    }
public class Employee
{
    private int employeeId;
    private String firstName;
    private String lastName;
    private Department department;

    public int getEmployeeId()
    {
        return employeeId;
    }

    public void setEmployeeId(int employeeId)
    {
        this.employeeId = employeeId;
    }

    public String getFirstName()
    {
        return firstName;
    }

    public void setFirstName(String firstName)
    {
        this.firstName = firstName;
    }

    public String getLastName()
    {
        return lastName;
    }

    public void setLastName(String lastName)
    {
        this.lastName = lastName;
    }

    public Department getDepartment()
    {
        return department;
    }

    public void setDepartment(Department department)
    {
        this.department = department;
    }
}
public class Department
{
    private int departmentId;
    private String departmentName;

    public int getDepartmentId()
    {
        return departmentId;
    }

    public void setDepartmentId(int departmentId)
    {
        this.departmentId = departmentId;
    }

    public String getDepartmentName()
    {
        return departmentName;
    }

    public void setDepartmentName(String departmentName)
    {
        this.departmentName = departmentName;
    }
}