gpt4 book ai didi

java - 创建新模型和 View 或将模型作为方法参数传递有什么区别

转载 作者:搜寻专家 更新时间:2023-10-31 19:57:31 26 4
gpt4 key购买 nike

我养成了这样做的习惯,这样在我的单元测试中我可以检查添加到模型中的内容:

@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";
}

最佳答案

区别只是语义上的。如果您不创建 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

关于java - 创建新模型和 View 或将模型作为方法参数传递有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9363006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com