Spring MVC请求参数绑定 自定义类型转化 和获取原声带额servlet request response信息
首先还在我们的框架的基础上建立文件
在domian下建立Account实体类
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
@RequestMapping(value = "/account")
public class Account { private String username;
private String password;
private Double money; 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;
} @Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
'}';
}
}
Account
然后在controller中的 类中进行对象绑定
在controller中的ParamsController中的建立一个方法接受这个类对象
@RequestMapping(value = "/accout")
public String save(Account account){ //把Account类中的信息都有封装进去
return "success";
}
然后传参的时候把对象的值得信息给传递进去
前端定义界面
<form action="/params/accout" method="post">
姓名:<input name="username" type="text"/> <br/> //传递的是account类中的属性值 因为请求路径中需要的参数的封装进了account类中 也就是把参数给整合了
密码:<input name="password" type="text"/> <br/>
金额:<input name="money" type="text"/> <br/>
<input type="submit" value="提交"/>
</form>
这个时候请求是可以成功的 因为就相当于把需要的参数给整合在一起了
如果对象中再包含对象怎么做呢?
下面看
我们再建立一个对象类User

User:
public class User {
private String username;
private String u_password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getU_password() {
return u_password;
}
public void setU_password(String u_password) {
this.u_password = u_password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", u_password='" + u_password + '\'' +
'}';
}
}
User
然后把User这个对象传递到Account中

get set 和toString方法也要重新生成
然后再把Account当成参数的时候 那么久也需要对Account中封装的User类也要传递参数的
这个时候的前端传值要把那个对象的名字也加上

前端传值: 直接在值前面加上对象. 值
<form action="/params/accout" method="post">
<!--姓名:<input name="account.name" type="text"/> <br/>--> <!--这里不可以指定对象传值不然就会识别不到-->
姓名:<input name="name" type="text"/> <br/>
密码:<input name="password" type="text"/> <br/>
金额:<input name="money" type="text"/> <br/>
User名字:<input name="user.username" /><br/>
User密码:<input name="user.u_password"/><br/> <input type="submit" value="提交"/> </form>
解决中文乱码问题
如果我们输入中文的话 不会报错但是显示就是乱码的

因为web.xml控制着和前端交互的配置 我们就需要再这里配置下
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>
再输入中文就不会乱码了
输入:

输出信息:

也可以在Controller中加 但是那样就要每个Controller都要加了
在controller中的RequestMapping中加入
produces = "text/html; charset=utf-8"

这样也可以对这个请求的返回都解决中文乱码 但是其他的Controller不解决 所以还是配置中加比较好
自定义类型转化器:
我们再设置请求参数的时候 有时候本该是String的我们输入Integer也可以这就是Spring mvc为我们自动做的类型转化 但是有些是需要我们自己转化的比如日期
定义一个User类 其中包含 Date 属性
import javax.xml.crypto.Data;
import java.util.Date; public class User { private String username;
private String u_password;
private Date date;
public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getU_password() {
return u_password;
} public void setU_password(String u_password) {
this.u_password = u_password;
} public Date getDate() {
return date;
} public void setDate(Date date) {
this.date = date;
} @Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", u_password='" + u_password + '\'' +
", date=" + date +
'}';
}
}
User
定义一个Controller
@RequestMapping(value = "/user")
public String save(User user){ System.out.println("User"+user);
return "success"; }
然后前端定义
<form action="/params/user" method="post">
User名字:<input name="username" /><br/>
User密码:<input name="u_password"/><br/>
User日期:<input name="date"/><br/>
<input type="submit" value="提交"/>
</form>

此时我们输入斜杆的日期是可以被识别的这是正规的日期输入格式
输出:
UserUser{username='zyl', u_password='123232', date=Mon Mar 04 00:00:00 CST 2019}
然后我们输入字符串格式的

然后就输出

是不被识别的 ,既然不被识别那么我们就要自定义类型转换器来进行数据类型的转化
转换步骤:
一:先编写转化的类方法
我再我们的java/cn/itcas/目录下再编写了一个StringToDateConverter类用来编写方法
StringToDateConverter: 因为本身java提供了这个转换的接口Converter我们只需要重写这个接口就可以了
package cn.itcas.utils; import org.springframework.core.convert.converter.Converter; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* 把字符串转换为日期
*
*/
public class StringToDateConverter implements Converter<String, Date>{
/**
*
* @param source 传递进来的值
* @return
*/
@Override
public Date convert(String source){ //必须实现这个方法不然会报错 if(source == null){
throw new RuntimeException("请您传入数据");
} try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); // 解析字符串 定义格式
Date date = df.parse(source);
return date;
} catch (Exception e) {
throw new RuntimeException("类型转换错误");
} }
}
StringToDateConverter
二 :为了让你的方法生效就需要再配置文件中进行配置
springmvc.xml
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="cn.itcas.utils.StringToDateConverter"/> <!--这里是你的转化的Controller-->
</set>
</property>
</bean> <!-- 开启springmvc框架 注解打开 -->
<mvc:annotation-driven conversion-service="conversionService"/> <!--把我们的类型转化器生效-->
然后再输入字符串就可以成功了

打印信息:
UserUser{username='zy', u_password='123232', date=Mon Mar 04 00:00:00 CST 2019}
获取原生的servlet信息
首先我们获取的信息都是传递来的 那么想要获取 原生的request 和response信息的话 怎么来获取呢?
其实很简单只需要通过HttpServletRequest 和HttpservletResponse这两个对象来获取就可以了
就像python中的 我们可以直接通过get和post来拿到request和response的信息
前端:
<a href="/params/testSerlet"> 获取原生的servlet信息</a>
controller:
/**
* 获取原生的serlet请求信息
* @return
*/
@RequestMapping("/testSerlet")
public String testSerlet(HttpServletRequest request, HttpServletResponse response){ // 如果我们想要 进行原生的serlet信息获取就要先传递两个原生的信息 HttpSession session = request.getSession(); // 从request中获得请求的session System.out.println("session:"+session);
System.out.println("session:"+session.getAttributeNames()); ServletContext context = session.getServletContext(); // 从session中获取请求连接
System.out.println("context"+context); return "params";
}
Spring MVC请求参数绑定 自定义类型转化 和获取原声带额servlet request response信息的更多相关文章
- Spring MVC请求参数绑定
所谓请求参数绑定,就是在控制器方法中,将请求参数绑定到方法参数上 @RequestParam 绑定单个请求参数到方法参数上 @RequestParam("id") Integer ...
- springmvc:请求参数绑定集合类型
一.请求参数绑定实体类 domain: private String username; private String password; private Double money; private ...
- Spring MVC温故而知新 – 参数绑定、转发与重定向、异常处理、拦截器
请求参数绑定 当用户发送请求时,根据Spring MVC的请求处理流程,前端控制器会请求处理器映射器返回一个处理器,然后请求处理器适配器之心相应的处理器,此时处理器映射器会调用Spring Mvc 提 ...
- Spring MVC初始化参数绑定
初始化参数绑定与类型转换很类似,初始化绑定时,主要是参数类型 ---单日期 在处理器类中配置绑定方法 使用@InitBinder注解 在这里首先注册一个用户编辑器 参数一为目标类型 proper ...
- 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_2 请求参数绑定实体类型
参数封装到javaBean对象中 创建新的包domain.在下面新建Account 实现序列化 的接口,定义几个属性 生成get和set.还有toString的方法 表单 重新发布tomcat jav ...
- 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_4 请求参数绑定集合类型
jabaBean里面有集合的情况 把account里面的user对象先注释掉.get和set都注释掉.然后toString方法需要重写 List和Map这两种对象.生成get和set方法 toStri ...
- spring mvc 请求参数日期格式化 代码
package com.sbl.pay.subaccount.converter; import java.text.DateFormat; import java.text.SimpleDateFo ...
- spring mvc请求参数中文乱码解决方案
POST 请求 在web.xml中加上增加过滤器 <filter> <filter-name>encodingFilter</filter-name> <fi ...
- SpringMVC 请求参数绑定
什么是请求参数绑定 请求参数格式 默认是key/value格式,比如:http:xxxx?id=1&type=2 请求参数值的数据类型 都是字符串类型的各种值 请求参数值要绑定的目标类型 Co ...
随机推荐
- 第一步:卸载手机上的“WIFI万能钥匙”! 会分享自己家的wifi
http://www.znds.com/tv-164866-1-1.html 楼主今日家中WIFI卡的不行,心想,20M的电信光纤没理由这么卡!于是就在网上查找了许多资料,接下来统一收集整理给大家!第 ...
- HDU3449_Consumer
这个是一个背包的变形题,很值得仔细体味 大致题意: 这个比普通背包多一个限制:再选每一类物品之前必须要先购买一个篮子来装,篮子有一定的价格,其他就和背包是一样的了 思路: 为了能够体现篮子的价值,我们 ...
- C语言深度剖析自测题8解析
#include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; int* ptr1 = (int*)(&a ...
- IPython notebook在浏览器中显示不正常的问题及解决方法
使用过Python的童鞋们应该知道IPython是一个比python自带的交互式界面更加友好的交互界面,IPython提供了自动补齐什么的,其实我还没开始用所以这里也不扯淡了,大家自己去网上查,IPy ...
- create-react-app创建项目后,运行npm run eject报错解决方法
运行npm run eject报错解决方法 主要问题是脚手架添加.gitgnore文件,但是却没有本地仓库,使用以下命令操作以下就可以了 git init git add . git commit - ...
- getopts举例
- HDU-4003 Find Metal Mineral 树形DP (好题)
题意:给出n个点的一棵树,有k个机器人,机器人从根节点rt出发,问访问完整棵树(每个点至少访问一次)的最小代价(即所有机器人路程总和),机器人可以在任何点停下. 解法:这道题还是比较明显的能看出来是树 ...
- noip2018火柴棒等式
以下题目摘自洛谷p1149 给你n根火柴棍,你可以拼出多少个形如“A+B=CA+B=C”的等式?等式中的AA.BB.CC是用火柴棍拼出的整数(若该数非零,则最高位不能是00).用火柴棍拼数字0-90− ...
- 力扣——gas station (加油站) python实现
题目描述: 中文: 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] ...
- 转 HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth到底指的哪到哪的距离之完全详解 scrollHeight: 获取对象的滚动高度. scrollLe ...