繁体   English   中英

如何将任何类的对象转换为Java中的Map?

[英]How to convert object of any class to a Map in Java?

在Spring MVC中,我们必须使用org.springframework.ui.Model实例将模型传递给视图。 它不是强类型的,我们必须像这样动态构建对象:

model.addAttribute("departmentID", departmentID);
model.addAttribute("departmentName", departmentName);
model.addAttribute("employees", employees);

但是,我来自ASP.NET MVC,在那里我将强类型对象传递给视图,我有ViewDepartment类,它有departmentIDdepartmentNameemployees字段,我只是将实例传递给视图。 这里它不起作用,但我仍然需要使用ViewDepartment类,因为我偶尔会将它作为对AJAX请求的响应发送。

因此,为了在Spring MVC中工作,我需要将ViewDepartment对象转换为org.springframework.ui.Model实例,一种方法是从HashMap构建org.springframework.ui.Model

Model.addAllAttributes(Map<String,?> attributes) 

问题是, 如何从ViewDepartment类的实例构建Map<String,?> attributes 创建HashMap对象并手动设置每个属性的每个属性不是选项,因为它不是DRY。 我需要一些方法来处理任何类,因为我在其他控制器中有其他模型类。

或者,可能是,有人可以告诉另一个解决此任务的方法,特别是与Spring MVC相关。

您可以使用反射来获取所有字段及其值的映射。 请注意,如果您有嵌套结构,这会变得复杂,但是使用给定的示例它应该可以工作,

public Map<String, Object> toMap( Object object ) throws Exception
{
    Map<String, Object> map = new LinkedHashMap<>();
    for ( Field field : object.getClass().getDeclaredFields() )
    {
        field.setAccessible( true );
        map.put( field.getName(), field.get( object ) );
    }
    return map;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM