1. HttpMessageConverter消息转换器
概念:
将请求信息----》消息转换器-----》对象
对象--------》消息转换器-----》响应信息体
消息转换器它只针对
@RequestBody/@ResponseBody注解或HttpEntity/ResponseEntity类
SpringMVC默认提供很多消息转换器
比如RequestMappingHandlerAdapter默认加载转换器:
ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
StringHttpMessageConverter: 负责读取字符串格式的数据和写出二进制格式的数据;
ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据;
F ormHttpMessageConverter: 负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据;
MappingJacksonHttpMessageConverter: 负责读取和写入json格式的数据;
SouceHttpMessageConverter: 负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
Jaxb2RootElementHttpMessageConverter:负责读取和写入xml 标签格式的数据;
AtomFeedHttpMessageConverter: 负责读取和写入Atom格式的数据;
RssChannelHttpMessageConverter: 负责读取和写入RSS格式的数据;
2. 如何使用消息转换器
1、注册MappingJacksonHttpMessageConverter
数据 key:value
value:字符串、基本数据类型、对象、数组
[]:数组 [value,value]
{}:对象 {数据,数据,数据}
3.1 通过ajax提交json数据到对象
save1.jsp
UserController.java
save2.jsp
save3.jsp
1、通过ajax获取响应json数据
userlist.jsp
1、<mvc:annotation-driven />
(1) 名称:使能注解驱动,相当于配置了RequestMappingHandlerMapping和RequestMappingHandlerAdapter等;
(2) 默认加载的转换器:
ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
StringHttpMessageConverter:负责读取字符串格式的数据和写出二进制格式的数据;
ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据;
SouceHttpMessageConverter: 负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
Jaxb2RootElementHttpMessageConverter: 负责读取和写入xml 标签格式的数据;
AtomFeedHttpMessageConverter: 负责读取和写入Atom格式的数据;
RssChannelHttpMessageConverter: 负责读取和写入RSS格式的数据;
(3) 另外还默认加载
数据转换
2、<mvc:default-servlet-handler/>
作用:用/配置前端控制器时,可 以访问静态资源(js,图片等)
6. SpringMVC中的参数绑定
1、能支持Servlet的api
HttpServletRequest对象
HttpServletResponse对象
HttpSession对象
OutputStream对象
2、简单类型的绑定
3、pojo类型的绑定
4、包装的pojo类型
5、数组的绑定
6、List的绑定:
批量添加数据
7、Map的绑定
注意问题:
List和Map不能作为参数存在,否则表单无法提交数据,只能以pojo类的某个属性存在。
概念:
将请求信息----》消息转换器-----》对象
对象--------》消息转换器-----》响应信息体
消息转换器它只针对
@RequestBody/@ResponseBody注解或HttpEntity/ResponseEntity类
SpringMVC默认提供很多消息转换器
比如RequestMappingHandlerAdapter默认加载转换器:
ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
StringHttpMessageConverter: 负责读取字符串格式的数据和写出二进制格式的数据;
ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据;
F ormHttpMessageConverter: 负责读取form提交的数据(能读取的数据格式为 application/x-www-form-urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和multipart/form-data格式的数据;
MappingJacksonHttpMessageConverter: 负责读取和写入json格式的数据;
SouceHttpMessageConverter: 负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
Jaxb2RootElementHttpMessageConverter:负责读取和写入xml 标签格式的数据;
AtomFeedHttpMessageConverter: 负责读取和写入Atom格式的数据;
RssChannelHttpMessageConverter: 负责读取和写入RSS格式的数据;
2. 如何使用消息转换器
1、注册MappingJacksonHttpMessageConverter
<!-- 注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
p:messageConverters-ref="messageConverter"
/>
<util:list id="messageConverter">
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</util:list>
3. json数据格式:
数据 key:value
value:字符串、基本数据类型、对象、数组
[]:数组 [value,value]
{}:对象 {数据,数据,数据}
3.1 通过ajax提交json数据到对象
save1.jsp
<script type="text/javascript" src="${ctxPath}/script/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="${ctxPath}/script/js/json2.js"></script>
<script type="text/javascript">
$(document).ready(function() {
testRequest();
});
function testRequest() {
var jsonData = {userName:'gec',password:'1111'};
$.ajax("${ctxPath}/saveUser1.do",
{
dataType:"json",
type:"post",
contentType:"application/json",
data:JSON.stringify(jsonData),
async:true , // 默认设置下,所有请求均为异步请求。如果设置为false,则发送同步请求
// 请求成功后的回调函数。
success:function(data){
alert(data);
},
// 请求出错时调用的函数
error:function(){
alert("数据发送失败");
}
}
);
}
</script>
UserController.java
@RequestMapping("/saveUser1.do")
public String saveUser(@RequestBody User user) {
System.out.println("user="+user);
return "success";
}
3.2 通过ajax提交json数据到集合
save2.jsp
<script type="text/javascript">
$(document).ready(function() {
testRequest();
});
function testRequest() {
var jsonData = [
{userName:'gec',password:'1111'},
{userName:'andy',password:'2222'},
{userName:'ken',password:'3333'}
];
$.ajax("${ctxPath}/saveUser2.do",
{
dataType:"json",
type:"post",
contentType:"application/json",
data:JSON.stringify(jsonData),
async:true ,
success:function(data){
alert(data);
},
error:function(){
alert("数据发送失败");
}
}
);
}
</script>
UserController.java
@RequestMapping("/saveUser2.do")
public String saveUser2(@RequestBody List<User> users) {
for (User user : users) {
System.out.println("user="+user);
}
return "success";
}
3.3 通过ajax提交表单数据到对象save3.jsp
<script type="text/javascript">
$(document).ready(function() {
testRequest();
});
function testRequest() {
$("#commit").click(function() {
$.post("${ctxPath}/saveUser3.do",
$("#userForm").serialize(),
function(data) {
alert(data);
}
);
});
}
</script>
……
<form id="userForm">
用户名:<input type="text" name="userName" /><br/>
密码:<input type="password" name="password" /><br/>
<input id="commit" type="button" value="提交"/><br/>
</form>
UserController.java
@RequestMapping("/saveUser3.do")
public String saveUser3(User user) {
System.out.println("user="+user);
return "success";
}
4. 如何获取json数据
1、通过ajax获取响应json数据
userlist.jsp
<script type="text/javascript">
$(document).ready(function() {
testRequest();
});
function testRequest() {
$.post("${ctxPath}/userlist.do",
null,
function(data) {
$.each(data, function() {
var tr = $("<tr align='center'/>");
$("<td/>").html(this.userName).appendTo(tr);
$("<td/>").html(this.password).appendTo(tr);
$("#booktable").append(tr);
});
},"json");
}
</script>
UserController.java
@RequestMapping("/userlist.do")
@ResponseBody
public List<User> userlist() {
List<User> list = new ArrayList<User>();
list.add(new User("张三", "111"));
list.add(new User("张四", "222"));
list.add(new User("张五", "333"));
list.add(new User("张六", "444"));
return list;
}
5. 简化SpringMVC的配置文件1、<mvc:annotation-driven />
(1) 名称:使能注解驱动,相当于配置了RequestMappingHandlerMapping和RequestMappingHandlerAdapter等;
(2) 默认加载的转换器:
ByteArrayHttpMessageConverter: 负责读取二进制格式的数据和写出二进制格式的数据;
StringHttpMessageConverter:负责读取字符串格式的数据和写出二进制格式的数据;
ResourceHttpMessageConverter:负责读取资源文件和写出资源文件数据;
FormHttpMessageConverter:负责读取form提交的数据(能读取的数据格式为 application/x-www-form- urlencoded,不能读取multipart/form-data格式数据);负责写入application/x-www-from-urlencoded和 multipart/form-data格式的数据;
MappingJacksonHttpMessageConverter: 负责读取和写入json格式的数据;SouceHttpMessageConverter: 负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
Jaxb2RootElementHttpMessageConverter: 负责读取和写入xml 标签格式的数据;
AtomFeedHttpMessageConverter: 负责读取和写入Atom格式的数据;
RssChannelHttpMessageConverter: 负责读取和写入RSS格式的数据;
(3) 另外还默认加载
数据转换
2、<mvc:default-servlet-handler/>
作用:用/配置前端控制器时,可 以访问静态资源(js,图片等)
6. SpringMVC中的参数绑定
1、能支持Servlet的api
HttpServletRequest对象
HttpServletResponse对象
HttpSession对象
OutputStream对象
2、简单类型的绑定
3、pojo类型的绑定
4、包装的pojo类型
5、数组的绑定
6、List的绑定:
批量添加数据
7、Map的绑定
注意问题:
List和Map不能作为参数存在,否则表单无法提交数据,只能以pojo类的某个属性存在。