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";}

相關文章
相關標籤/搜索