SpringMVC数据绑定
SpringMVC数据绑定
使用JavaBean绑定参数
-
Spring MVC会根据请求参数名和JavaBean属性名进行自动匹配,自动为对象填充属性值,同时支持级联属性
package com.soutwind.entity; import lombok.Data; @Data public class Address { private String value; }
package com.soutwind.entity;
import lombok.Data;
@Data
public class User {
private long id;
private String name;
private Address address;
}
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2023/2/10
Time: 14:52
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/save" method="post">
<%-- 表单里name的值映射到User类里面--%>
用户id:<input type="text" name="id"><br/>
用户名:<input type="text" name="name"><br/>
<%--级联操作,把name里面的值赋值adress属性里的value属性--%>
用户地址<input type="text" name="address.value"><br/>
<input type="submit" value="注册">
</form>
</body>
</html>
handler类中的save方法
@RequestMapping(value = "/save",method =RequestMethod.POST )
public String save(User user){//discapterAdapter对传过来的值进行自动填充,填充的参数可以是类创建的对象的方式
System.out.println(user);
return "index";
}
上述操作如果出现中文乱码问题,只需要在web.xml添加Spring自带的过滤器即可。
<!--在web.xml中配置解决中文乱码的过滤器-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- JSP转发和重定向
- 转发是一次请求,重定向是两次请求。
- 转发请求的数据可以保留使用,重定向第一次请求的数据不可以给第二次请求。
Spring默认是以转发的形式相应jsp。
//转发,SpringMVC默认接收JSP的方式为转发
@RequestMapping(value = "/forward")
public String forward(){
return "foward:/index.jsp";//效果和 return "index"默认效果一样
}
重定向
//重定向
@RequestMapping("/redirect")
public String redirect(){
return "redirect:/index.jsp";
}
-
Spring MVC数据绑定
概念:数据绑定:在后端的业务方法中直接获取客户端http请求中的参数,将请求参数映射到业务方法的形参中。
SpringMVC 中数据绑定的工作是由 HandlerAdapter来完成的。
-
基本数据类型。
package com.soutwind.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/data")
public class DataBindHandler {
@RequestMapping("baseType" )
@ResponseBody
//@ResponseBody注解作用,不会把业务方法的返回值通过解析器解析成jsp,而是以它本身的形式返回给客户端
public String baseType(int id){
return id+"";
}
}
@ResponseBody表示SpringMVC 会直接将业务方法的返回值响应给客户端,如果不加@ResponseBody
注解,SpringMVC会将业务方法的返回值传递给DisapatherServlet,再由DisapatherServlet调用ViewResolver
对返回值进行解析,映射到一个JSP资源。
存在问题,id是基本数据类型,所以不能为空,不然会报错.
解决方法:包装类
- 包装类:可以接受null
@RequestMapping("/packageType")
@ResponseBody
public String packageType(Integer id){
return id +"";
}