What are the differences between Model, ModelMap, and ModelAndView?

SpringSpring Mvc

Spring Problem Overview


What are the main differences between the following Spring Framework classes?

  • Model
  • ModelMap
  • ModelAndView

Using Model.put(String,Object) we can access the values in .jsp files, but ModelMap.addAttribute(String,Object) also did same thing. I do not understand the difference between these classes.

Spring Solutions


Solution 1 - Spring

Model is an interface while ModelMap is a class.

ModelAndView is just a container for both a ModelMap and a view object. It allows a controller to return both as a single value.

Solution 2 - Spring

Differences between Model, ModelMap, and ModelAndView

Model: It is an Interface. It defines a holder for model attributes and primarily designed for adding attributes to the model.

Example:

@RequestMapping(method = RequestMethod.GET)
    public String printHello(Model model) {
          model.addAttribute("message", "Hello World!!");
          return "hello";
       }

ModelMap: Implementation of Map for use when building model data for use with UI tools.Supports chained calls and generation of model attribute names.

Example:

@RequestMapping("/helloworld")
public String hello(ModelMap map) {
	String helloWorldMessage = "Hello world!";
	String welcomeMessage = "Welcome!";
	map.addAttribute("helloMessage", helloWorldMessage);
	map.addAttribute("welcomeMessage", welcomeMessage);
	return "hello";
}

ModelAndView: This class merely holds both to make it possible for a controller to return both model and view in a single return value.

Example:

@RequestMapping("/welcome")
public ModelAndView helloWorld() {
		String message = "Hello World!";
		return new ModelAndView("welcome", "message", message);
	}

Solution 3 - Spring

Model: is an interface it contains four addAttribute and one merAttribute method.

ModelMap: implements Map interface. It also contains Map method.

ModelAndView: As Bart explain it allows a controller return both as a single value.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBasavarajView Question on Stackoverflow
Solution 1 - SpringBartView Answer on Stackoverflow
Solution 2 - SpringVikas HarleView Answer on Stackoverflow
Solution 3 - SpringAshuView Answer on Stackoverflow