在 Spring MVC 中我们必须使用 org.springframework.ui.Model
将模型传递给 View 的实例。它不是强类型的,我们必须像这样动态构建对象:
model.addAttribute("departmentID", departmentID);
model.addAttribute("departmentName", departmentName);
model.addAttribute("employees", employees);
但是,我来自 ASP.NET MVC,在那里我将强类型对象传递给 View ,并且我有 ViewDepartment
有departmentID
的类(class), departmentName
和 employees
字段,我只是将实例传递给 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/