SpringMVC 的传参问题
1. SpringMVC 简单的传参问题
在浏览器的前端页面,模拟传入 username
和 password
两个参数
<a href="/test/param?username=ffideal&password=123456">开始跳转</a>
然后在 controller
层写下方法
/**
* @Description: 测试一个SpringMVC基本的传参问题
* @param:
* @return:
* @auther: ffideal
* @date:
*/
@RequestMapping(path = "/param")
public String toSuccess(String username,String password){
System.out.println("成功跳转到success页面");
System.out.println("用户名:" + username);
System.out.println("密码是:" + password);
return "/success";
}
2. 参数绑定实体类型
- 首先创建一个实体类
public class Consumer implements Serializable {
private String uname;
private String upassword;
private double price;
}
- 在前端传输数据
<%--请求参数绑定--%>
<form action="/test/request" method="post">
姓名:<input type="text" name="uname"/> <br>
密码:<input type="text" name="upassword"/> <br>
价格:<input type="text" name="price"/> <br>
<input type="submit" value="提交">
</form>
- 在
controller
层处理请求
@RequestMapping("request")
public String testRequest(Consumer consumer){
System.out.println("成功跳转到success页面");
System.out.println("消费者名:" + consumer);
return "/success";
}
3. 配置解决中文乱码的过滤器
在 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>
这样在 post 作为提交方式的时候,中文也可以被传入。
4. 关于自定义类型转换器的实现
这样的日期格式在后台处理的时候会出现问题
表示提交的类型有问题
首先设置一个过滤类
public class StringToDate implements Converter<String, Date> {
/**
* @Description: 传入字符串,转为日期类型
*/
@Override
public Date convert(String source) {
if (source == null){
throw new RuntimeException("输入数据不能为空");
}
try {
// 将 yyyy-MM-dd 这种类型转为正常的日期
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.parse(source);
} catch (Exception e) {
throw new RuntimeException("数据转换出现问题");
}
}
}
然后在 配置文件 springmvc-config
中配置参数
<!-- 配置自定义类型转换器 -->
<!-- 首先引入 ConversionServiceFactoryBean 类-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!-- 设置参数 -->
<property name="converters">
<!-- ConversionServiceFactoryBean 源码中只有一个set类型-->
<set>
<!-- 将StringToDate处理类放入容器中 -->
<bean class="untils.StringToDate"></bean>
</set>
</property>
</bean>
<!--开启springmvc框架注解支持-->
<!-- 要加入conversion-service -->
<mvc:annotation-driven conversion-service="conversionService"/>
5. 一些原始API
SpringMVC 还支持使用原始 ServletAPI 对象作为控制器方法的参数。
@RequestMapping("testAPI")
public String testAPI(HttpServletRequest request, HttpServletResponse response){
System.out.println("执行了...");
System.out.println(request);
System.out.println(request.getSession());
System.out.println(request.getSession().getServletContext());
System.out.println(response);
return "/success";
}