SpringMVC消息转换器

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
<!-- 注解的处理器适配器 -->
	<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类的某个属性存在。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值