数据格式化和ModelAttribute注解的介绍
关于数据传递:
客户端传递数据到服务端:
1.使用普通的形式
A.传递简单的数据
如果是说你传递的数据的名称跟控制层中的形参的名称不一致的情况下需要使用
注解: @RequestParam()如果存在在注解的话,那么一定要传递对应的名称,除非设置required="false"
个人建议是保存名称一致
B.传递的数据为表单的数据
(1)使用普通的表单进行提交,那么你需要注意的是 name="类中的数据",如果是说我的类中有关联的类型那么name="role.role_id",表单中含有name属性才是传递数据
(2)使用Jquery中的表单序列化操作,该操作比较方便,但是如果是日后工作当中,会只用客户端传递JSON的数据形式的字符串
2.使用的是占位符
A.使用占位符操作,那么你一般情况下需要传递简单的数据,形式如下/sys/100/tomcat
控制层当中,一定为如下的格式 /sys/{id}/{name},并且对应的形参中一定要含有@PathVariable注解
B.其实占位符可以传递复杂的数据,但是一般情况下需要你知道如何这是正则表达式
服务端传递数据到客户端:
1.一共介绍了5种形式
(1)使用原生的二阶段用request进行传递数据,需要你再方法(HttpServletRequest)形式
(2)ModelAndView
(3)方法名(Map<String,Object> map)注意这些形参对进行实例化操作
(4)方法名(ModelMap modelMap)注意你可以使用 Ctrl+T的快捷键进行查看继承的关系
(5)方法名(Model model)
(6)返回客户端的数据为JSON的格式
JavaScript Object Navtion 轻量级的传输数据格式
XML
2.关于在客户端显示数据的形式
A.使用EL表达式和JSTL标签
B.使用SpringMVC提供的标签
单独传递数据为日期
<h2>日期传递</h2> <form action="client01" method="get"> <input type="text" name="mydate" placeholder="输入日期格式"> <input type="submit" value="提交日期数据"> </form> |
一般情况下的,日期格式我们习惯于使用YYYY-MM-DD的形式 |
@RequestMapping("/client01") public ModelAndView test01(@RequestParam(name="mydate") @DateTimeFormat(pattern="yyyy-MM-dd")Date date){ System.out.println(date); return null; } |
单独传递数据为金钱
<h2>金钱传递</h2> <form action="client02" method="get"> <input type="text" name="money" placeholder="输入金钱格式"> <input type="submit" value="提交金钱数据"> </form> |
关于金钱,我们一般习惯于使用表示方法为: 1,123,000.00的形式,如果工作当中涉及到金钱操作的时候,一会使用的是为BigDecimal处理金钱,还有不能使用你了解的四舍五入,需要使用银行家的四舍五入方式 |
@RequestMapping("/client02") public ModelAndView test02(@NumberFormat(pattern="#,###.##")Double money){ System.out.println(money); return null; } |
疑问,我想让两种形式2016.01.01||2016-10-10||2014/12/12格式?
我们需要使用对数据的处理注解,@InitBinder?
我们介绍的实现方式,现在我们只是了解其使用方式:
当你有客户数据传递的时候,那么我会进入含有标注@InitBinder的方法中
package com.shxt.controller; import java.awt.Component; import java.awt.Graphics; import java.awt.Rectangle; import java.beans.PropertyChangeListener; import java.beans.PropertyEditor; import java.beans.PropertyEditorSupport; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.NumberFormat; import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import com.shxt.model.User; @Controller//如果是你没有命名,那么id=类名的首字母小写 public class ClienDataController { @RequestMapping("/client01") public ModelAndView test01(@RequestParam(name="mydate") @DateTimeFormat(pattern="yyyy-MM-dd")Date date){//有接收客户端数据,进入@InitBinder注解的方法内部 System.out.println(date); return null; } @RequestMapping("/client02") public ModelAndView test02(@NumberFormat(pattern="#,###.##")Double money){//有接收客户端数据,进入@InitBinder注解的方法内部 System.out.println(money); return null; } @RequestMapping("/client03") public ModelAndView test03(){//没有接收客户端数据,不进入@InitBinder注解的方法内部 System.out.println("test03"); return null; } @RequestMapping("/client04") public ModelAndView test04(User user){//有接收客户端数据,进入@InitBinder注解的方法内部 System.out.println("test04"); return null; } @RequestMapping("/client05") public ModelAndView test05(HttpServletRequest request){//没有接收客户端数据,不进入@InitBinder注解的方法内部 System.out.println("test05"); return null; } @RequestMapping("/client06") public ModelAndView test06(Map<String,Object> map){//没有接收客户端数据,不进入@InitBinder注解的方法内部 System.out.println("test06"); return null; } @RequestMapping("/client07") public ModelAndView test07(String shxt) throws UnsupportedEncodingException{ //如果是GET请求解决中文乱码问题,有两种方式:请自己总结一下 /*System.out.println("test07---->>"+ new String(shxt.getBytes("ISO8859-1"),"UTF-8"));*/ System.out.println("test07---->>"+shxt); return null; } @InitBinder //当客户端传递数据的时候,并且我的控制器中的方法要接收之前,会进入该标注的方法内部进行处理 public void shxt(WebDataBinder binder){ System.out.println("请注意观察该输入语句,在上面情况下输出?"); //String.class为客户端传递的数据要转换成形参所对应的那个类 binder.registerCustomEditor(String.class, new PropertyEditorSupport(){ //内部类-->>什么是Java内部类,如何使用? @Override public void setAsText(String text) throws IllegalArgumentException { System.out.println("客户端传递的数据为:"+text); setValue(text+":齐天大圣");//重新赋值 } }); } } |
配置工具类,进行对日期的解决方案
@InitBinder//当客户端传递数据的时候,并且我的控制器中的方法要接收之前,会进入该标注的方法内部进行处理 public void shxt(WebDataBinder binder){ binder.registerCustomEditor(Date.class, new PropertyEditorSupport(){ @Override public void setAsText(String text) throws IllegalArgumentException { setValue(DateUtils.parseDate(text)); } }); } |
针对于DateUtils的工具类,默认需要使用commons-lang-2.6.jar包的支持
//注意使用这种方式去实现,自己的工具类的方式? private static String[] parsePatterns = { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; |
介绍@ModelAttribute注解方式介绍
1.模拟情景,更新操作,如下图:
这情景模式,就产生如下的模拟代码:
JSP页面代码: <form action="user/update" method="post"> <input type="hidden" name="_method" value="put"> <input type="text" name="account" value="wukong"> <input type="text" name="user_id" value="1000"> <input type="submit" value="用户更新"> </form> |
持久化类代码,省略getter和setter public class User { private Integer user_id; private String user_name; private String account; private String password; |
package com.shxt.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.shxt.model.User; @Controller public class UserController { @RequestMapping(value="/user/update",method=RequestMethod.PUT) public ModelAndView update(User user){ System.out.println(user); return null; } @RequestMapping("/shxt") public ModelAndView test01(){ System.out.println("哈哈哈"); return null; } @ModelAttribute public void init2(){ System.out.println("******"); } @ModelAttribute public void init1(Integer user_id){ System.out.println("======"+user_id); } @InitBinder//想想这个使用规则? public void 数据(WebDataBinder binder){ System.out.println("四海兴唐"); } } 问题:在控制台输出的结果是什么? |
那么我们已经搞定了上面的代码,下面我们来进行改造,代码如下:
package com.shxt.controller; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import com.shxt.model.User; @Controller public class UserController { @RequestMapping(value="/user/update",method=RequestMethod.PUT) public ModelAndView update(@ModelAttribute(value="user_data")User user){ System.out.println(user); return null; } @RequestMapping("/shxt") public ModelAndView test01(){ System.out.println("哈哈哈"); return null; } @ModelAttribute public void init2(){ System.out.println("******"); } @ModelAttribute public void init1(Integer user_id,Map<String,Object> map){ //System.out.println("======"+user_id); if(user_id!=null){ //查询数据库,模拟通过主键查询数据库操作 System.out.println("我进来了"); User user = new User(); user.setUser_id(1000); user.setAccount("wukong"); user.setPassword("123456"); user.setUser_name("悟空"); map.put("user_data",user); } } } |
数据格式化和ModelAttribute注解的介绍的更多相关文章
- 第四节 数据格式化和ModelAttribute注解的介绍
从来都不坦荡,情绪都写在脸上:不开心的时候,不爱说话,笑也勉强. 课堂笔记,如果这么写,不仅仅是手速,还要有语速, 这样不太适合! --胖先生 关于数据传递: 客户端传递数据到服务端: 1.使用普通的 ...
- 08_springmvc数据回显和@ModelAttribute注解详解
一.数据回显 提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面. 二.pojo数据回显方法 1.springmvc默认对pojo数据进行回显. pojo数据传入controller方法后,s ...
- SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显
在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1. ...
- SpringMVC(三)-- 视图和视图解析器、数据格式化标签、数据类型转换、SpringMVC处理JSON数据、文件上传
1.视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象 对于那些返回 String,View 或 ModeMap 等类型的处理方法,SpringMVC 也会在内部将 ...
- Spring MVC 使用介绍(十三)数据验证 (一)基本介绍
一.消息处理功能 Spring提供MessageSource接口用于提供消息处理功能: public interface MessageSource { String getMessage(Strin ...
- 【Spring学习笔记-MVC-9】SpringMVC数据格式化之日期转换@DateTimeFormat
作者:ssslinppp 1. 摘要 本文主要讲解Spring mvc数据格式化的具体步骤: 并讲解前台日期格式如何转换为java对象: 在之前的文章<[Spring学习笔记-MVC ...
- 0061 Spring MVC的数据格式化--Formatter--FormatterRegistrar--@DateTimeFormat--@NumberFormat
Converter只完成了数据类型的转换,却不负责输入输出数据的格式化工作,日期时间.货币等虽都以字符串形式存在,却有不同的格式. Spring格式化框架要解决的问题是:从格式化的数据中获取真正的数据 ...
- Spring MVC SessionAttributes ModelAttribute注解
说明 本文主要针对 @SessionAttributes注解 和 @ModelAttribute注解的基础用法进行解析.至于为什么会将这两个注解放在一起,是因为它们之间还是有点影响的. @Sessio ...
- 05springMVC数据格式化
数据格式化简介 内建的格式转换器 使用内建格式转换器示例 字段级别的解析/格式化 集成到Spring Web MVC环境 1 数据格式化简介 对属性对象的输入/输出进行格式化,其实是属于“类 ...
随机推荐
- 从Shell眼中看世界【TLCL】
字符展开: echo * 路径名展开: echo D* 隐藏文件路径名展开 ls -d .[!.]?* 波浪线展开: echo ~ 算术表达式展开: $((expression)) 花括号展开: ...
- 扩展KMP(转)
拓展kmp是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i ...
- rpm卸载软件error preun
这两天,使用ipvsadm -ln总是显示空. 后来,使用strace ipvsadm -ln定位 看来,是ipvsadm模块有问题,卸载了再重新安装吧,结果出现这种问题. 从来没遇到这种问题: er ...
- Android 报错Android - Performing stop of activity that is not resumed
[原文] FROM STACKOVERFLOW: Just giving my 50 cents on the issue. Catching the exception is indeed one ...
- 用js将一个数组合并到另一个数组中
var arr1 = ["one","two","three"]; var arr2 = ["1","2&qu ...
- Spring data jpa 使用技巧记录
软件152 尹以操 最近在用Springboot 以及Spring data jpa ,使用jpa可以让我更方便的操作数据库,特开此帖记录使用jpa的一些小技巧. 一.使用spring data j ...
- 基于组的策略(GBP)开启新型网络设计时代
在传统物理网络环境下,划分VLAN,分配网段,设置路由是个网工应该熟悉的内容.在SDN环境下,比如neutron虚拟网络,我们用API创建网络,子网,虚拟路由器,负载均衡和防火墙,这些还是太网络化了. ...
- host capability
目前通过ComputeCapabilitiesFilter 是可以做到cpu 指令集的filter,ComputeCapabilitiesFilter 是通过flavor的extra_spe来传递的. ...
- html5学习(新增元素)
来源于<实战html5>contenteditable 规定是否可编辑元素的内容 css3圆角 border-radius旋转变换 transform:rotate(); 变换 trans ...
- spring: ?.运算符
?.运算符 对于被调用方法的返回值来说,我们同样可以调用它的方法.例如,如果selectArtist()方法返回的是一个String,那么可以调用toUpperCase()将整个名字改为大写字母形式: ...