Which is better, return "ModelAndView" or "String" on spring3 controller

Spring MvcController

Spring Mvc Problem Overview


The way of return ModelAndView

@RequestMapping(value = "/list", method = RequestMethod.GET)
public ModelAndView list(
	@UserAuth UserAuth user, 
	ModelAndView mav) {

	if (!user.isAuthenticated()) {
		mav.setViewName("redirect:http://www.test.com/login.jsp");
		return mav;
	}

	mav.setViewName("list");
	mav.addObject("articles", listService.getLists());

	return mav;
}

The way of return String

@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(
	@UserAuth UserAuth user, 
	Model model) {

	if (!user.isAuthenticated()) {
		return "redirect:http://www.test.com/login.jsp";
	}

	model.addAttribute("articles", listService.getLists());

	return "list";
}

These work same. which is better way? and what is difference?

Spring Mvc Solutions


Solution 1 - Spring Mvc

There is no better way. Both are perfectly valid. Which one you choose to use depends which one suits your application better - Spring allows you to do it either way.

Historically, the two approaches come from different versions of Spring. The ModelAndView approach was the primary way of returning both model and view information from a controller in pre-Spring 2.0. Now you can combine the Model parameter and the String return value, but the old approach is still valid.

Solution 2 - Spring Mvc

I would like to add me 2 cents also. Second approach is more towards convention oriented i.e developer does explicitly mention what is his view but its implicit that return string is view name. So less coding,readable and standard. Much better than older way with ModelAndView

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
QuestiongentlejoView Question on Stackoverflow
Solution 1 - Spring MvcskaffmanView Answer on Stackoverflow
Solution 2 - Spring MvcM SachView Answer on Stackoverflow