SpringMVC的控制器接收前端數據的方式


1.請求處理方法中可以出現以下幾種參數類型,直接在controller方法形參上定義默認類型的對象,就可以使用這些對象。可以通過下列對象來獲取前台傳來的參數:

  ①HttpServletRequest對象:通過request對象可以獲取參數信息

  ②HttpservletResponse對象:通過response對象可以處理響應信息

  ③HTTPSession對象:獲取session中存儲的對象

  ④Model/ModelMap:Model是一個接口,ModelMap是一個接口的實現。作用是將模型數據填充到request域

    模型對象(ModelMap)的特定屬性具有Session范圍的作用域。  我們在②處添加了一個ModelMap屬性,其屬性名為currUser,

而①處通過@SessionAttributes注解將ModelMap中名為currUser的屬性放置到Session中,所以我們不但可以在login()請求所對應的JSP視圖

頁面中通過request.getAttribute("currUser")和session.getAttribute("currUser")獲取user對象,還可以在下一個請求所對應的JSP視圖頁面中

通過session.getAttribute("currUser")或者ModelMap.get("currUser")訪問到這個屬性。

@Controller  
@RequestMapping("/user")  
@SessionAttributes("currUser") //①將模型對象(ModelMap)中currUser屬性放到Session屬性列表中,以便這個屬性可以跨請求訪問  
public class UserLoginController{  
   @RequestMapping(value="/login")  
   public String login(@RequestParam("id") int id, User user, ModelMap model){  
       // ②往ModelMap中存放currUser屬性,該屬性將被轉存到Session屬性列表中  
       model.addAttribute("currUser", user);  
       return "success";  
   }  
}

 

  ⑤使用IO對象作為入參 ,如 java.io.InputStream/java.io.Reader 及java.io.OutputStream/java.io.Writer 

  ⑥使用其他類型的參數,java.util.Locale/java.security.Principal ,也可以通過Servlet的HttpServletRequest的getLocale()及getUserPrincipal() 

  ⑦使用表單對象綁定請求參數值

    非常簡單,只需將對象的屬性名和input的name值一一匹配即可。

    User對象中有ContactInfo屬性,在表單代碼中,需要使用“屬性名(對象類型的屬性).屬性名”來命名input的name。

    除此之外,對於基本數據類型和包裝數據類型,表單中input的name值和Controller的參數變量名保持一致,就能完成數據綁定,如果不一致可以使用@RequestParam注解。

    需要注意的是,如果Controller方法參數中定義的是基本數據類型,但是從頁面提交過來的數據為null或者”"的話,會出現數據轉換的異常。

    也就是必須保證表單傳遞過來的數據不能為null或”",所以,在開發過程中,對可能為空的數據,最好將參數數據類型定義成包裝類型。

@RequestMapping("saysth.do")
public void test(User user) {
    System.out.println(user.getFirstName());
    System.out.println(user.getLastName());
    System.out.println(user.getContactInfo().getTel());
    System.out.println(user.getContactInfo().getAddress());
}
<form action="saysth.do" method="post">
<input name="firstName" value="張" /><br>
<input name="lastName" value="三" /><br>
<input name="contactInfo.tel" value="13809908909" /><br>
<input name="contactInfo.address" value="北京海淀" /><br>
<input type="submit" value="Save" />
</form>

2.注解方式

  @RequestParam直接標注在方法的變量名上

   參數有以下三個:

      • value:參數名字,即入參的請求參數名字,如username表示請求的參數區中的名字為username的參數的值將傳入;
      • required:是否必須,默認是true,表示請求中一定要有相應的參數,否則將報404錯誤碼;
      • defaultValue:默認值,表示如果請求中沒有同名參數時的默認值,默認值可以是SpEL表達式,如“#{systemProperties['java.vm.version']}”。

 使用@CookieValue綁定請求中的Cookie值
  @CookieValue的參數和@RequestParam一樣

 使用@RequestHeader綁定請求報文頭的屬性值

@RequestMapping(value="/method3")  
    public String method3(  
            @RequestHeader("Accept-Encoding") String encoding,  
            @RequestHeader("Keep-Alive") long keepAlive){  
        return "methodSignature";  
    }

  使用@PathVariabl獲取路徑中傳遞參數

@RequestMapping(value="/users/{userId}/topics/{topicId}")
public ModelAndView helloWorld(
              @PathVariable String userId, 
              @PathVariable Long topicId) {  
        System.out.println(id);  
        System.out.println(str);  
        return new ModelAndView( " /helloWorld " );  
}  

  如請求的URL為“控制器URL/users/123/topics/456”,則自動將URL中模板變量{userId}和{topicId}綁定到通 過@PathVariable注解的同名參數上,即入參后userId=123、    topicId=456。代碼在 PathVariableTypeController中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM