Spring MVC @ModelAttribute方法


问题内容

关于Spring MVC
@ModelAttribute方法的问题,在控制器@RequestMapping方法中设置模型属性与通过方法分别设置属性@ModelAttribute相比,哪种方法更好,使用最多?

从设计的角度来看,从以下方面考虑哪种方法更好:

方法1

@ModelAttribute("message")
public String addMessage(@PathVariable("userName") String userName, ModelMap model) {

  LOGGER.info("addMessage - " + userName);
  return "Spring 3 MVC Hello World - "  + userName;
}

@RequestMapping(value="/welcome/{userName}", method = RequestMethod.GET)
public String printWelcome(@PathVariable("userName") String userName, ModelMap model) {

  LOGGER.info("printWelcome - " + userName);
  return "hello";
}

方法2

@RequestMapping(value="/welcome/{userName}", method = RequestMethod.GET)
public String printWelcome(@PathVariable("userName") String userName, ModelMap model) {

  LOGGER.info("printWelcome - " + userName);

  model.addAttribute("message", "Spring 3 MVC Hello World - "  + userName);

  return "hello";
}

问题答案:

一个没有比另一个更好。他们俩都有另一个目的。

  • 方法: 如果您需要始终使用某些属性填充特定控制器的模型,则方法级别@ModelAttribute更有意义。
  • 参数: 要绑定请求中的数据并将其隐式添加到模型中时,请在参数上使用它。

在更好的方法上回答您的问题

我会说方法2更好,因为数据特定于该处理程序。