请求参数绑定及自定义类型转换
param.jsp文件请求参数发送请求:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--请求参数绑定--%> <a href="param/testParam?username=yyj&password=123">请求参数绑定</a> <%--把数据封装Account类中--%> <form action="param/saveAccount" method="post"> 姓名:<input type="text" name="username"/><br/> 密码:<input type="text" name="password"/><br/> 金额:<input type="text" name="money"/><br/> 用户姓名:<input type="text" name="user.uname"/><br/> 用户年龄:<input type="text" name="user.age"/><br/> <input type="submit" value="提交"/> </form> <%--把数据封装Account类中,类中存在list和map的集合--%> <form action="param/saveAccount" method="post"> 姓名:<input type="text" name="username"/><br/> 密码:<input type="text" name="password"/><br/> 金额:<input type="text" name="money"/><br/> 用户姓名:<input type="text" name="list[0].uname"/><br/> 用户年龄:<input type="text" name="list[0].age"/><br/> 用户姓名:<input type="text" name="map['one'].uname"/><br/> 用户年龄:<input type="text" name="map['one'].age"/><br/> <input type="submit" value="提交"/> </form> <%--自定义类型转换器--%> <form action="param/saveUser" method="post"> 用户姓名:<input type="text" name="uname"/><br/> 用户年龄:<input type="text" name="age"/><br/> 用户生日:<input type="text" name="date"/><br/> <input type="submit" value="提交"/> </form> <a href="param/testServlet">Servlet原生的API</a> </body> </html>
自定义实体类:
Account类:
package com.yyj.domain; import java.io.Serializable; import java.util.List; import java.util.Map; public class Account implements Serializable { private String username; private String password; private Double money; private User user; private List<User> list; private Map<String, User> map; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } public List<User> getList() { return list; } public void setList(List<User> list) { this.list = list; } public Map<String, User> getMap() { return map; } public void setMap(Map<String, User> map) { this.map = map; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "Account{" + "username='" + username + '\'' + ", password='" + password + '\'' + ", money=" + money + ", user=" + user + ", list=" + list + ", map=" + map + '}'; } }
User类:
package com.yyj.domain; import java.io.Serializable; import java.util.Date; public class User implements Serializable { private String uname; private Integer age; private Date date; public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String toString() { return "User{" + "uname='" + uname + '\'' + ", age=" + age + ", date=" + date + '}'; } }
接收请求参数的Controller:
package com.yyj.controller; import com.yyj.domain.Account; import com.yyj.domain.User; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 请求参数绑定 */ @Controller @RequestMapping("/param") public class ParamController { /** * 请求参数绑定入门 * * @return */ @RequestMapping("/testParam") public String testParam(String username, String password) { System.out.println("执行了..."); System.out.println("用户名:" + username); System.out.println("密码:" + password); return "success"; } /** * 请求参数绑定把数据封装到JavaBean的类中 * * @return */ @RequestMapping("/saveAccount") public String saveAccount(Account account) { System.out.println("执行了..."); System.out.println(account); return "success"; } /** * 自定义类型转换器 * * @param user * @return */ @RequestMapping("/saveUser") public String saveUser(User user) { System.out.println("执行了..."); System.out.println(user); return "success"; } /** * 原生的API * * @return */ @RequestMapping("/testServlet") public String testServlet(HttpServletRequest request, HttpServletResponse response) { System.out.println("执行了..."); System.out.println(request); HttpSession session = request.getSession(); System.out.println(session); ServletContext servletContext = session.getServletContext(); System.out.println(servletContext); System.out.println(response); return "success"; } }
自定义类型转换器:
编写类型转换器:
package com.yyj.utils; import org.springframework.core.convert.converter.Converter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; /** * 把字符串转换日期 */ public class StringToDateConverter implements Converter<String, Date> { /** * String source 传入进来字符串 * * @param source * @return */ public Date convert(String source) { // 判断 if (source == null) { throw new RuntimeException("请您传入数据"); } DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { // 把字符串转换日期 return df.parse(source); } catch (Exception e) { throw new RuntimeException("数据类型转换出现错误"); } } }
配置类型转换器生效:
<!--配置自定义类型转换器--> <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.yyj.utils.StringToDateConverter"/> </set> </property> </bean> <!-- 开启SpringMVC框架注解的支持 --> <!--配置类型转换器生效--> <mvc:annotation-driven conversion-service="conversionService"/>
解决post请求中文乱码问题:
web.xml中配置
<!--配置解决中文乱码的过滤器--> <filter> <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>