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

标签 java spring-mvc

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

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

但是,我来自 ASP.NET MVC,在那里我将强类型对象传递给 View ,并且我有 ViewDepartmentdepartmentID的类(class), departmentNameemployees字段,我只是将实例传递给 View 。这里不行,但我还是要用ViewDepartment类,因为我偶尔会发送它作为对 AJAX 请求的响应。

所以,为了让它在 Spring MVC 中工作,我需要翻译 ViewDepartment对象到 org.springframework.ui.Model 的实例, 一种方法是构建 org.springframework.ui.Model来自 HashMap :

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

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

或者,有人可以告诉这个任务的另一个解决方案,特别是与 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;
}

关于java - 如何将任何类的对象转换为 Java 中的 Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21062625/

相关文章:

java - 使用自定义绑定(bind)时,JOOQ 生成的模型需要手动导入第三方库

java - Spring Boot新建项目时pom.xml报错

java - 如何标记文件并将数据输入到数组中?

hibernate - Spring事务不会异常回滚

java - 编写具有 REST 功能的 AuthenticationFilter 的最佳方法是什么?

java - 传送门 :actionURL Spring MVC Portlet

java - 需要 jTable 在时间延迟后显示 10 行,然后在所有显示后加载新记录

java - Spring 框架 : No BeanFactory available anymore (probably due to serialization)

扩展 Flux/实现发布者并多次调用 s.onNext() 时,Spring 5 Reactive 失败

spring-mvc - Spring MVC 资源版本控制添加 ResourceUrlEncodingFilter