与Spring
类似,我们以httpServeletRequest.getParameter("key")
作为@RequestParam("key")
的替代方案,
我们有@ModelAttribute("key")
以外的其他选择吗?
model.addAttribute("student",new Student());
...
...
@RequestMapping("/processStudentForm")
public String processTheForm(
@ModelAttribute("student") Student student
)
{
...
}
我们有类似的东西吗?
public String processTheForm(
Model model
)
{
Student student = model.getAtribute("key");
...
}
更新1
@RequestMapping("/showStudentForm")
public String showTheForm(Model model) {
model.addAttribute("key",new Student());
return "studentForm";
}
<form:form action='processStudentForm' modelAttribute='key' method='post'>
...
</form:form>
我将表单值绑定到学生对象中。如何通过请求对象访问此模型属性?
答案 0 :(得分:1)
无法通过请求对象直接访问学生模型对象,但是您可以通过与请求对象不同的方式来访问它 默认情况下,spring在使用FormHttpMessageConverter将其转换为应用程序/ x-www-form-urlencoded请求的模型映射的后台进行了大量工作,您可以参考文档。
您可以执行与spring内部相同的操作。我尝试了它的工作原理,但是您可以通过多种方式进行操作。请参考堆栈溢出帖子以获取其他答案
Map map = httpServletRequest.getParameterMap().entrySet()
.stream().collect(Collectors.toMap(e -> e.getKey(), e -> Arrays.stream(e.getValue()).findFirst().get()));
Student student = new ObjectMapper().convertValue(map, Student.class);
Getting request payload from POST request in Java servlet
但是使用默认实现始终是一个好习惯。