前言

这次主要讲讲 消息转换:一次请求,从请求页面--后台数据处理--返回响应内容.

主要涉及以下几个部分

请求Content-Type:

 1. text/plain
 2. application/json
 3. application/xml
 4. application/x-www-form-urlencoded

请求正文:(都可以理解为string)

 1. 普通string
 2. json格式
 3. xml格式

Controller接收

 1. String
 2. Bean

响应Content-Type:

 1. text/plain
 2. application/x-www-form-urlencoded
 3. application/application+xml

相关流程和转换原理,单独开一篇博文写.

具体实例

我们讲解的项目是spring-mvc-showcase,如果你有疑问可以参考spring3-mvc的开篇。

该java文件
在包(pkg):  org.springframework.samples.mvc.messageconverters
类名为: MessageConvertersController


我抽取部分代码进行讲解

1.   最简单的string请求和响应

第一部分:java代码

  1. @RequestMapping(value="/string", method=RequestMethod.POST)
  2. public @ResponseBody String readString(@RequestBody String string) {
  3. return "Read string '" + string + "'";
  4. }

这个方法需要注意的展开讲一下,其他大同小异

第二部分:jsp页面

html

  1. <form id="readString" class="textForm" action="<c:url value="/messageconverters/string" />" method="post">
  2. <input id="readStringSubmit" type="submit" value="Read a String" />
  3. </form>

js(在js中,对submit时间做了重写)

  1. $("form.textForm").submit(function(event) {
  2. var form = $(this);
  3. var button = form.children(":first");
  4. $.ajax({ type: "POST", url: form.attr("action"), data: "foo", contentType: "text/plain", dataType: "text", success: function(text) { MvcUtil.showSucce***esponse(text, button); }, error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, button); }});
  5. return false;
  6. });
  7. 注意:js用到了jquery,所以语法,并且在jsp中做了一定的封装如MvcUtil。

第三部分: 通过jsp发起请求,查看请求信息

请求正文:

由于注解@RequestBody 存在,String直接被获取,返回值应为Read string 'foo'(上一篇文章我们讲过@ResponseBody )

第四部分: 效果图

2. 从请求中数据,转换成bean,作为参数传入,再以bean作为返回值

  1. @RequestMapping(value="/form", method=RequestMethod.POST)
  2. public @ResponseBody String readForm(@ModelAttribute JavaBean bean) {
  3. return "Read x-www-form-urlencoded: " + bean;
  4. }

3. map作为返回值

  1. @RequestMapping(value="/form", method=RequestMethod.GET)
  2. public @ResponseBody MultiValueMap<String, String> writeForm() {
  3. MultiValueMap<String, String> map = new LinkedMultiValueMap<String, String>();
  4. map.add("foo", "bar");
  5. map.add("fruit", "apple");
  6. return map;
  7. }
  8. //注意:返回类型MultiValueMap

4. 响应一个bean

  1. @RequestMapping(value="/xml", method=RequestMethod.GET)
  2. public @ResponseBody JavaBean writeXml() {
  3. return new JavaBean("bar", "fruit");
  4. }
  5. //注意:返回类型JavaBean

几个注解

1. @RequestBody

表示method的参数能够从HTTP请求的body中取得值

2. @ModelAttribute

(我给这个注解加了个红色,就是说,这个注解有点复杂,但别有压力)

@ModelAttribute可以用于方法或者方法参数

2.1 @ModelAttribute用于方法(method)

一个@ModelAttribute用于方法之上表示这个方法增加一个或者多个model属性,这些方法支持同样的参数类型,但不能直接映射到请求上。所有的@ModelAttribute方法在@RequestMapping的方法之前被调用

2.2 @ModelAttribute用于method参数

表示这个参数能够从model中检索出来,如果不存在与model里,这个参数首次实例化并且加入到model中。一旦存在于model中,这个参数字段会被填充,名字与绑定的请求参数中对应。例如本例中可能Bean有字段foo,则能够填充model

3. @Valid

@Valid注解不是spring的注解,所以需要加入如下配置:

  1. <mvc:annotation-driven/>

@Valid要求 必须符合输入要求,否则就提示400错误

小结

这次简单的阐述了一下请求格式与响应格式。包括string,bean,map.json,xml等多种方式,同时对一些注解做了简单介绍,但基本对理解本文核心内容能有一定帮助。

具体参考spring官方文档,或者关注本博客后面内容。

转载于:https://blog.51cto.com/yjplxq/978957

【framework】spring3-mvc实例-信息转换相关推荐

  1. spring3-mvc实例-信息转换

    http://yjplxq.blog.51cto.com/4081353/978957 转载于:https://www.cnblogs.com/passer1991/p/3282837.html

  2. Spring3 MVC

    一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而 ...

  3. Spring MVC(10):REST 支持 Ajax+Spring MVC 实例

    Spring 对于 REST 的支持 REST REST(Respresentational State Transfer) 是一种面向资源,强调描述应用程序远程调用的开发方式,并不特指某种技术和框架 ...

  4. Spring3 MVC+Spring+Spring Jdbc实现的权限管理系统,可以控制到增删改查

    前端框架: Jquery1.6+easyui1.3.1+zTree3.4 后端Java框架:Spring3 MVC+Spring+Spring Jdbc三层架构,大量采用注解 Dao层:通过对Spri ...

  5. Struts2和Spring3 MVC的区别说明

    项目刚刚换了web层框架,放弃了struts2改用spring3mvc 当初还框架的时候目的比较单纯---springmvc支持rest,小生对restful url由衷的喜欢 不用不知道 一用就发现 ...

  6. 通过shell脚本抽取MySQL实例信息

    这是学习笔记的第 1727 篇文章 先来为自己吹的牛来打脸,昨天计划今天要做15件看起来复杂的事情, 不过值得一提的是,加上今天临时加的蛮有意义的事情,勉强还可以添上2~3件,这样差不多是有9~10件 ...

  7. 信息转换原理: 信息、知识、智能的一体化理论

    来源:人机与认知实验室 [数据.信息.知识.智能除了转换外,是否还有变异.弥聚等?能否把这些变化看成是态.势.感.知结构扭曲而产生的必然现象?] 摘要 如何把信息转换为解决问题所需要的智能,是信息科学 ...

  8. Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作

    Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序 2 ...

  9. Spring3 MVC Login Interceptor(Spring 拦截器)

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

最新文章

  1. 全面理解Javascript闭包和闭包的几种写法及用途--转载自https://www.cnblogs.com/yunfeifei/p/4019504.html...
  2. Containerpilot 配置文件reload
  3. eclipse查看git地址_Git大文件管理:函数计算和OSS支持的Git LFS服务器
  4. java svnkit_java svnkit实现svn提交,更新等操作
  5. how is Java Bean object created
  6. 前端学习(1987)vue之电商管理系统电商系统之通过路由加载商品列表
  7. 机器学习笔记十一之降维
  8. 跨浏览器共享数据_可以让跨域要数据的模式:jsonp
  9. 【Vue】—插槽的基本语法
  10. 《信号与系统学习笔记》—信号与系统的时域和频域特性(二)
  11. 模拟电路——晶体管基础
  12. 僵尸粉检测 php,微信新功能,一键检测你的手机卡不卡,还能查僵尸粉
  13. android9应用icon尺寸,APP-icon尺寸
  14. 办公室计算机收不到主机打印机,图文详解电脑怎么连接办公室打印机 一招教你搞定!...
  15. python 文件另存为快捷键_pycharm快捷键
  16. python去除图片背景(透明色)
  17. 【课程设计|C++】设计一个哈夫曼编码器/译码器设计
  18. MapReduce入门(一)—— MapReduce概述 + WordCount案例实操
  19. FI---SAP汇率损益处理方法
  20. 【软考网络管理员】2023年软考网管初级常见知识考点(1)- 计算机硬件基础

热门文章

  1. XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法
  2. CKfinder2.0.2版本破解
  3. c#_StringBuilder的用法总结
  4. linux查看cpu个数命令,Linux怎么查看物理CPU个数
  5. python抓取简单网页_【Python3 爬虫】01_简单页面抓取
  6. 计算机仿真和vr的区别,AR对比VR有何不同?你能分清楚他们的区别么
  7. 阻止路由跳转得方式_vue路由拦截及页面跳转的设置方法
  8. c语言对10求余不为7,【PTA | 基础编程题目集】7-12 两个数的简单计算器 (10分)
  9. html中open打开新网页,JavaScript-打开新窗口(window.open)
  10. java 数组 反射_java数组的反射