我正在开发一个Spring MVC项目,在那里我从UI表单中获取了一些数据。我有一个DTO类,其中包含私有成员。当我提交表单数据时,因为@请求映射
注释,边框控制器(Dispatcher Servlet)调用控制器类的方法。在这个方法中,我传递DTO类的引用作为参数,并通过调用getter方法在控制台上打印DTO类的成员变量的值。但是我不明白DTO类的对象是如何自动创建的,表单数据是如何绑定到DTO类的成员变量的。请告诉我它是如何工作的?
控制器类
package com.soni.web.controller;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.soni.web.dto.StudentRecordsDTO;
@Component
@RequestMapping("/")
public class StudentRecords {
public StudentRecords() {
System.out.println(getClass().getName());
}
@RequestMapping(value="/signup", method = RequestMethod.POST)
public String signup(StudentRecordsDTO studentRecordsDTO) {
System.out.println(studentRecordsDTO.getId());
System.out.println(studentRecordsDTO.getName());
return "/registration_success.html";
}
}
DTO类
package com.soni.web.dto;
public class StudentRecordsDTO {
private int id;
private String name;
public StudentRecordsDTO(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
HTML表单
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="signup" method ="post">
<input type = "num" name="id">
<input type = "text" name="name">
<input type = "password" name="pwd">
<input type = "num" name = "nm">
<input type = "submit" value="press">
</form>
</body>
</html>
因为您使用的是POST方法,所以作为主体(JSON数据)的一部分发送的任何内容都被转换为POJO (plain old java object ),即本例中的StudentRecordsDTO,即signup()方法的参数。
如果json数据是从客户端发送的,则看起来像这样
{
"id" : 1,
"name" : "Chirag"
}
然后在内部,当JSON反序列化发生时,这里有更多关于序列化/反序列化内容
“id”映射到类中的“id”属性,并使用使用java约定的setter方法来设置对象的值。
类似地,“name”映射到类中的“name”属性。
所以,在内部你可以这样想。
StudentRecordsDTO studentRecordsDTO = new StudentRecordsDTO();
studentRecordsDTO.setId(1);
studentRecordsDTO.setName("Chirag")
并且此 studentRecordsDTO 对象将传递给您的控制器方法,并将值设置为您要传递的值。
你也可以在这里使用@RequestBody来提高可读性。
@RequestMapping(value="/signup", method = RequestMethod.POST)
public String signup(RequestBody StudentRecordsDTO studentRecordsDTO) {
System.out.println(studentRecordsDTO.getId());
System.out.println(studentRecordsDTO.getName());
return "/registration_success.html";
}
所以Spring在后台为你做这件事。你也可以看看
@RequestHeader设置作为请求的一部分直接传递的头。@RequestParam在GET方法的情况下额外增加请求参数。
Spring 还提供了各种其他抽象(和自定义),因此您可以专注于核心业务逻辑。
本文向大家介绍SpringMVC实现数据绑定及表单标签,包括了SpringMVC实现数据绑定及表单标签的使用技巧和注意事项,需要的朋友参考一下 首先理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 但我们提交后,为了将请求信息映射到模型中,还需要手动进行格式转换,此外还借助了一个中转对象productForm,其字段名称和Produ
我知道我们可以通过反射访问私有构造函数,就像@Sanjay T.Sharma在回答我的问题时提到的:“instanceof void”总是返回false吗? 不过,@Duffymo表示: 您可以使用反射访问私有的所有东西--方法、构造函数、数据成员、所有东西。 如何访问私有方法和私有数据成员? 是否可以通过反射访问局部变量? 是否有方法防止任何人访问私有构造函数、方法和数据成员?
我有以下密封类: 我希望将此从xml传递给视图模型: 然后我在需要将信息传递给click处理程序的视图中使用lambdas: 我得到这个错误: 找不到标识符“pot”。检查标识符的拼写是否正确,并且没有或标记丢失。 我也尝试过直接导入,但仍然不起作用
我正在项目中使用数据绑定,但在xml绑定类中使用和时未生成。 例如,我有activity_main.xml Android Studio:2.1.3 类路径:com.Android.tools.build:Gradle:2.1.3 minSdkVersion 16 targetSdkVersion 24 buildToolsVersion 24.0.0
问题内容: 我的页面上有一些CSS类=“ hello”的Divs。此外,我使用Ajax通过CSS class =“ hello”来获取更多Divs。我有一段代码被称为Divs的Click事件,如下: 从一开始,它就可以与我页面中存在的Divs一起正常工作,但不适用于使用Ajax加载的Divs。为了将这小段代码与新加载的Divs绑定在一起,我需要做些什么吗? 问题答案: 您应该用来将处理程序绑定到绑