一、SpringMVC 获取请求参数
(六)、接收复杂数据类型
Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List --> 未加@RequestBody注解
(七)、时间格式处理
@DateTimeFormat只会处理可以直接从request中获取得到时间;
对于传输的JSON中的日期格式,由Jackson的@JsonFormat 或FastJson的dateFormat处理,其他JSON消息转换器也有对应的配置。
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8")
二、SpringMVC数据传递相关注解扩展
(一)、@ModelAttribute
@ModelAttribute主要有两种用法:
1、标注在非功能方法上,每次执行方法时都会先执行@ModelAttribute注解的方法,可以:
①在参数中获取使用Model,HttpServletRequest,HttpServletResponse等
②也可以正常获取请求的数据
③可以向Model、HttpServletRequest中添加数据
④若该方法有返回值时:自动把返回的数据添加到Modal中,对于此时的Key值有两种情况
a.如果@ModelAttribute没有指定value值,那么添加的key就是类型名称首字母小写
b.如果指定了value值会在①的基础上额外添加一个,key就是指定的值
2、用在Action方法的参数上,将注解的参数添加到Model中,Key值有两种情况
①若@ModelAttribute未指定value值,那么Key值就是类型名称首字母小写
②若@ModelAttribute指定value值,那么key值就是指定的值
(二)、@SessionAttributes与@SessionAttribute
@SessionAttributes用于在请求之间的HTTP Servlet会话中存储model属性。 它是类型级别的注解,用于声明特定控制器使用的会话属性。会筛选该控制器下的所有添加到Model中的数据,将符合筛选条件的数据自动添加到Session中。
@SessionAttribute 用在方法的形参上,从session中获取指定名称的的数据,并把数据给形参参数。
三、SpringMVC 转发和重定向
(一)、转发 forward
(二)、重定向 redirect
重定向时传参方式
1、添加到Model或ModelAndView中的数据会以参数的形式拼接在url后,可以用来传递数据
2、手动拼接到Url上(注意需要进行URLEncoder.encode()编码)
3、RedirectAttributes对象
①默认的addAttribute()还是会拼接url
②使用RedirectAttributes对象对象时 Model中的数据不会拼接到url,而ModelAndView中的数据会。
③使用addFlashAttribute()方法可以不在URL中显示参数
* 需要在重定向的目标方法使用@ModelAttribute接收参数
* 其原理就是放到session中,session在跳到页面后马上移除对象。所以刷新就没有值了