В чем разница между созданием нового модового вида или передачей модели в качестве параметра метода - PullRequest
5 голосов
/ 20 февраля 2012

У меня появилась привычка делать это, чтобы в своих модульных тестах я мог проверить, что было добавлено в модель:

@RequestMapping(value = "/Foo", method = RequestMethod.GET)
public ModelAndView goHome()
{
  ModelandView mav = new ModelAndView("foobar.jsp");
  mav.addObject("bar", new Bar());
  return mav;
}

Это лучше:

@RequestMapping(value = "/Foo", method = RequestMethod.GET)
public String goHome(final Model model)
{
  model.addAttribute("bar", new Bar());
  return "foobar.jsp";
}

1 Ответ

6 голосов
/ 20 февраля 2012

Разница только семантическая. Если вы не создадите объект ModelAndView, Spring сделает это за вас.

Как правило, второй подход предпочтительнее, так как модульное тестирование намного проще, особенно если вы передаете Map вместо вашей модели.


РЕДАКТИРОВАТЬ Чтобы уточнить на тестировании (на основе jUnit). Я считаю следующую подпись предпочтительной:

@RequestMapping(value = "/Foo", method = RequestMethod.GET)
public String goHome(final Map model) {
    model.addAttribute("bar", new Bar());
    return "foobar.jsp";
}

Это позволяет нам создать тест, даже не зная, Spring участвует

@Test
public void testGoHome() {
    // Setup
    Controller controller = ...
    Map<String, Bar> model = new HashMap<String, Bar>();

    // Test
    assertEquals("foobar.jsp", controller.goHome(model));
    assertNotNull(model.get("bar"));
}

Этот пример основан на Map, но также может быть ModelMap или даже Model, если вы предпочитаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...