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

时间:2014-01-11 13:10:47

标签: java spring-mvc

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

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

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

所以,为了让它在Spring MVC中运行,我需要将ViewDepartment对象转换为ViewDepartment的实例,一种方法是从org.springframework.ui.Model构建org.springframework.ui.Model:< / p>

HashMap

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

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

1 个答案:

答案 0 :(得分:2)

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

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;
}