gpt4 book ai didi

java - 为什么 ModelAtribute 作为 null 传递?

转载 作者:行者123 更新时间:2023-11-28 20:24:05 25 4
gpt4 key购买 nike

我开发了下一个目标类

class Person{
public Person(){}
public Person(String name) {
super();
this.name = name;
}

String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

下一个 Controller :

@Controller
private static class SampleController {


@RequestMapping(value="/path", method=RequestMethod.POST)
public String path(@Valid @ModelAttribute("person") Person person, BindingResult result, Model model) {
model.addAttribute("name",person.getName());
System.out.println(person.getName());
return "view";
}
}

和下一个测试:

public class ModelAssertionTests {

private MockMvc mockMvc;

@Before
public void setup() {

SampleController controller = new SampleController("a string value", 3, new Person("a name"));

this.mockMvc = standaloneSetup(controller)
.defaultRequest(get("/"))
.alwaysExpect(status().isOk())
.build();
}
@Test
public void testTest() throws Exception {
Person person = new Person("name");
mockMvc.perform(post("/path").sessionAttr("person", person));
}
}

开启 Debug模式

在这一行:

 mockMvc.perform(post("/path").sessionAttr("person", person));

我看到了

enter image description here

当我转到 Controller 方法时:

 model.addAttribute("name",person.getName()); 

我看到了

enter image description here

这是什么原因?

如何解决?

最佳答案

这是因为 sessionAttr("person", person) 在您的 mockMvc 请求中将 person 设置为 session 属性,而 @ModelAttribute 注释模型属性

要将 session 变量放入模型中(从而解决问题),请使用 @SessionAttributes 注释:

@Controller
@SessionAttributes("person")
private static class SampleController {
...
}

阅读更多 here .

顺便说一句,您的 Controller 应该是public,而不是private static

关于java - 为什么 ModelAtribute 作为 null 传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19427341/

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