SpringMVC数据传递相关注解扩展

一、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在跳到页面后马上移除对象。所以刷新就没有值了

 
 
 
 

你可能感兴趣的:(servlet,java,开发语言)