Spring MVC Controller to View Data Transfer Methods

Data Transfer from Controller to View

Spring MVC provides multiple mechanisms to pass data from controllers to views. Here are four primary approaches:

1. ModelAndView Approach

Handler methods returning ModelAndView objects can directly add model attributes:

@GetMapping("/model-view-example")
public ModelAndView modelViewExample() {
    String targetView = "displayPage";
    ModelAndView mav = new ModelAndView(targetView);
    
    UserProfile userProfile = new UserProfile();
    userProfile.setUsername("jdoe");
    userProfile.setPassword("secure123");
    userProfile.setRegistrationDate(LocalDate.now());
    
    mav.addObject("displayName", "John");
    mav.addObject("user", userProfile);
    return mav;
}

2. Model/Map/ModelMap Approach

Handler methods can accept Model, ModelMap, or Map parameters:

@GetMapping("/model-example")
public String modelExample(Model model) {
    UserProfile user = new UserProfile();
    user.setUsername("jsmith");
    user.setPassword("modelPass");
    user.setRegistrationDate(LocalDate.now());
    
    model.addAttribute("displayName", "Jane");
    model.addAttribute("user", user);
    return "displayPage";
}

@GetMapping("/map-example")
public String mapExample(Map<String, Object> dataMap) {
    UserProfile user = new UserProfile();
    user.setUsername("rbrown");
    user.setPassword("mapPass");
    user.setRegistrationDate(LocalDate.now());
    
    dataMap.put("displayName", "Robert");
    dataMap.put("user", user);
    return "displayPage";
}

View template access example:

<!-- displayPage.jsp -->
<div>
  Username: ${user.username}<br>
  Password: ${user.password}<br>
  Registered: ${user.registrationDate}<br>
  Display Name: ${displayName}
</div>

3. @SessionAttributes Annotation

Persist model attributes across requests using session storage:

@SessionAttributes({"user"})
@Controller
@RequestMapping("/user")
public class UserController {

    @GetMapping("/session-example")
    public String sessionExample(Model model) {
        UserProfile user = new UserProfile();
        user.setUsername("sessionUser");
        user.setPassword("sessionPass");
        model.addAttribute("user", user);
        return "displayPage";
    }
}

Accessing session attributes in views:

Session User: ${sessionScope.user.username}

4. @ModelAttribute Annotation

Bind method parametesr to model attributes or execute pre-handler methods:

Parameter Binding

@GetMapping("/attribute-param")
public String attributeParameter(@ModelAttribute("user") UserProfile user, 
                                @ModelAttribute("name") String displayName,
                                Model model) {
    user.setUsername("attributeUser");
    user.setPassword("paramPass");
    displayName = "Attribute Example";
    model.addAttribute("name", displayName);
    return "displayPage";
}

Pre-handler Methods

@ModelAttribute("preloadData")
public Map<String, Object> preloadModel() {
    UserProfile user = new UserProfile();
    user.setUsername("preloadUser");
    user.setPassword("preloadPass");
    
    Map<String, Object> modelData = new HashMap<>();
    modelData.put("displayName", "Preloaded");
    modelData.put("user", user);
    return modelData;
}

@GetMapping("/preload-example")
public String preloadExample() {
    return "displayPage";
}

Accessing preloaded data:

Preloaded Name: ${preloadData.displayName}

Tags: SpringMVC ModelAndView ModelMap SessionAttributes ModelAttribute

Posted on Sun, 24 May 2026 19:51:09 +0000 by Obadiah