4:spring mvc 数据绑定

java

  1. 如何绑定数据

     

  2. API方式绑定数据

     

    咱们还能够经过如HttpServletRequest 等API 获得请求数据,但推荐使用注解方式,由于使用起来更简单。咱们须要首先看看功能处理方法支持哪些类型的形式参数,以及他们的具体含义。
    1、ServletRequest/HttpServletRequest 和ServletResponse/HttpServletResponse

    2、InputStream/OutputStream 和Reader/Writer

    requestBodyIn:等价于request.getInputStream();
    responseBodyOut:等价于response.getOutputStream() 。

    3、WebRequest/NativeWebRequest
    WebRequest 是Spring Web MVC 提供的统一请求访问接口,不只仅能够访问请求相关数据(如参数区数据、请求头数据,但访问不到Cookie 区数据),还能够访问会话和上下文中的数据;NativeWebRequest 继承了WebRequest,并提供访问本地Servlet API 的方法。

    4、HttpSession

    session 访问不是线程安全的,若是须要线程安全,须要设置AnnotationMethodHandlerAdapter 或RequestMappingHandlerAdapter 的synchronizeOnSession 属性为true,便可线程安全的访问session。

    5、命令/表单对象
    Spring Web MVC 可以自动将请求参数绑定到功能处理方法的命令/表单对象上。

    6、Model、Map、ModelMapSpring Web MVC 提供Model、Map 或ModelMap 让咱们能去暴露渲染视图须要的模型数据。

    虽然此处注入的是三个不一样的类型(Model model, Map model2, ModelMap model3),但三者是同一个对象

    AnnotationMethodHandlerAdapter 和RequestMappingHandlerAdapter 将使用BindingAwareModelMap 做为模型对象的实现,即此处咱们的参数(Model model, Map model2, ModelMap model3)都是同一个BindingAwareModelMap 实例。

    7、Errors/BindingResult



     
  3. 注解方式绑定数据

    一、@RequestParam绑定单个请求参数值;数组

    二、@PathVariable绑定URI 模板变量值;安全

    三、@CookieValue绑定Cookie 数据值session

    四、@RequestHeader绑定请求头数据;app

    五、@ModelAttribute绑定参数到命令对象;ui

    六、@SessionAttributes绑定命令对象到session;url


    @RequestParam绑定单个请求参数值
    public String requestparam(@RequestParam("username") String username)

    @RequestParam注解主要有哪些参数
    value:参数名字,即入参的请求参数名字,如username 表示请求的参数区中的名字为username 的参数的值将传入;
    required:是否必须,默认是true,表示请求中必定要有相应的参数,不然将报404 错误码;
    defaultValue:默认值,表示若是请求中没有同名参数时的默认值spa

    public String requestparam(@RequestParam(value="username“,required=false) String username)
    表示请求中能够没有名字为username 的参数,若是没有默认为null,此处须要注意以下几点:原子类型:必须有值,不然抛出异常,若是容许空值请使用包装类代替。Boolean 包装类型类型:默认Boolean.FALSE,其余引用类型默认为null。

    对于多个同名请求参数的处理,
    例如:url?role=admin&role=user
    public String requestparam(@RequestParam(value=“role”) String roles)
    实际获得的值是roles=“admin,user”。多个值以逗号的方式隔开
    或者把方法参数定义为字符串数组(String[] roles)或集合(List<String> roles)线程

    @PathVariable绑定URI 模板变量值
    @RequestMapping(value="/users/{userId}/topics/{topicId}")public String test(@PathVariable(value="userId") intuserId, @PathVariable(value="topicId") inttopicId)
    如请求的URL 为“控制器URL/users/123/topics/456”,则自动将URL 中模板变量{userId}和{topicId} 绑定到经过@PathVariable注解的同名参数上,即入参后userId=12三、topicId=456。code

    @CookieValue绑定Cookie 数据值
    public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
    传入参数类型也能够是javax.servlet.http.Cookie类型。public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)

    @RequestHeader绑定请求头数据
    @RequestMapping(value="/header")public String test(@RequestHeader("User-Agent") String userAgent,@RequestHeader(value="Accept") String[] accepts)

    @ModelAttribute绑定请求参数到Model
    @ModelAttribute一个具备以下三种使用方式:
    做用在方法参数里面:用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,并且自动暴露为模型数据用于视图页面展现时使用;
    做用在通常方法上面:该Controller的全部方法在调用前,先执行此@ModelAttribute方法;
    做用于方法的返回值上面:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展现时使

    public String findUser(@ModelAttribute("user") UserModel user) @ModelAttribute("cityList")public List<String> cityList() {
    
        return Arrays. asList("北京", "山东");
    
    }
    
    public @ModelAttribute(“user”) UserModel findUser(@ModelAttribute(“user2”) UserModel user)   


    注:返回值上的user会覆盖方法参数上的user2做为视图的模型名

    匿名绑定
    public String findUser(@ModelAttribute UserModel user)
    Spring Web MVC 会自动将简单类名(首字母小写)做为名字暴露对于集合类型(Collection 接口的实现者们,包括数组),生成的模型对象属性名为“简单类名(首字母小写)”+“ List”

    @SessionAttributes绑定对象到session 在控制器上加入@SessionAttributes(value = { “user”}) @SessionAttributes(value = { “user”}) public class SessionAttributeController调用SessionStatus对象的setComplete()销毁当前控制器上使用的Session @RequestMapping("/session2") public String session(@ModelAttribute("user") UserModeluser, SessionStatusstatus) {status.setComplete();return "success";}

相关文章
相关标签/搜索