Spring MVC中Model的实际实现是怎样的

问题描述 投票:0回答:1

很多人都回答说

Model
是一个接口,而
ModelView
是一个实现
Map
接口的类。

  1. 我的困惑是,到底是什么实现了接口

    Model
    ? (我是Spring MVC的初学者所以请耐心等待 您可以参考此线程以获取代码提示。 Model、ModelMap、ModelAndView 有什么区别?

  2. 更有趣的是,我看到有人只是使用

    Map<>
    界面:

// When the path is routed to '/new' below method to be called and view //returned is newPokemon

    @RequestMapping(method = RequestMethod.GET, value ="/new")

        public String newPokemonForm(Map<String, Object> model) {
        Pokemon Pokemon = new Pokemon();
        model.put("pokemon", Pokemon);
        return "newPokemon";
    }

所以我在想这个模型参数

Map<>
应该声明类型,而modelmap是实际类型? 有人可以跟我澄清一下吗? 非常感谢

----------------------------------更新-------------- --------------

第一个问题,其实在Intellij中查起来很简单。只需打开源代码包,感谢 Elmar Brauch。请参见下面的屏幕截图: screenshot of finding the related source code

java rest model
1个回答
1
投票

如果您将构建工具配置为下载源代码,则只需打开 Spring 的 Model 界面即可。类型层次结构(您可以在 Eclipse 中打开它)向您显示以下类实现 Model 接口:

  • 公共类 ConcurrentModel 扩展 ConcurrentHashMap 实现 Model
  • 公共类 ExtendedModelMap 扩展 ModelMap 实现 Model

在这两个类中,您可以看到它们扩展了某种 Map 类,该类在超类中实现了 Map 接口。

在运行时你可以弄清楚,使用哪种类型作为Map接口的实现。 设置断点并在调试模式下检查或执行如下操作:

@PostMapping
public void postMap(@RequestBody Map map) {
    System.out.println(map.getClass());
}

这会为我的带 @RestController 注释的类打印此类型: 类 java.util.LinkedHashMap

© www.soinside.com 2019 - 2024. All rights reserved.