1. 程式人生 > 其它 >關於springmvc中接收引數的幾種方式

關於springmvc中接收引數的幾種方式

分享目前所遇到的SSM專案中,@Controller層接收引數的幾種方式。

一、根據屬性名傳遞資料

這是最簡單的情況,傳遞來的引數名直接與後臺的引數值相對應。比如在位址列輸入這樣一個地址:http://localhost:8080/user?username=abc 	

​ 後臺程式碼:

@Controller
public class TestController {

    @ResponseBody
    @RequestMapping(value = "/user")
    public void input(String username){
        System.out.println(username);
    }
}

​ 定義在方法中的引數就根據屬性名和型別獲取到來自前端的資料,保證名字一致!

二、封裝到bean中傳遞資料

        <p>
            <label for="user_login">使用者名稱或電子郵件地址<br />
                <input type="text" name="username" id="user_login" class="input" value="<%=username%>" size="20" required/></label>
        </p>
        <p>
            <label for="user_pass">密碼<br />
                <input type="password" name="password" id="user_pass" class="input" value="<%=password%>" size="20" required/>
            </label>
        </p

​ 這是前臺的登入頁面的部分標籤,在使用者點選登入按鈕的時候。會將這個form 標籤的所有資料一起傳送到後臺。顯然這時候就不能在方法中建立那麼多引數使之於引數一一對應,這時候就需要封裝一個bean,用他來接收資料。

​ 後臺程式碼:

    @RequestMapping(value = "/insertSubmit", method = RequestMethod.POST)
    public String insertUserSubmit(User user) {
        User user2 = userService.getUserByName(user.getUserName());
        User user3 = userService.getUserByPassword(user.getUserPassword());
        if (user2 == null && user3 == null) {
            user.setUserRegisterTime(new Date());
            user.setUserStatus(1);
            user.setUserRole(UserRole.USER.getValue());
            userService.insertUser(user);
        }
        return "redirect:/admin/user";
    }

​ input的name屬性對應的值被傳遞到User裡面的屬性裡面,如果在值只傳遞了部分屬性,其他屬性會為空。同時要注意到User裡面要有set,get方法,沒有就不注入。

三、通過HttpServletRequest來傳遞資料

​ 同樣的,對於上面那個登入例子,如果我們只是進行簡單的資料傳遞,輸出。我們還可以利用HttpServletRequest來傳遞資料。

​ 後臺程式碼:

 public String loginVerify(HttpServletRequest request, HttpServletResponse response) {

        String username = request.getParameter("username");
        String password = request.getParameter("password");

四、利用@RequestParam和@PathVariable來接收引數

​ 我注意到,在SSM專案中這兩個註解是最常用來接收引數的,因為他們使用起來更靈活方便。

  • @RequestParam

​ value=”name” 表示引數名稱。

​ required=true 表示如果沒有傳遞引數,則會報 400引數異常。

@Controller
public class TestController {

    @ResponseBody
    @RequestMapping(value = "/user")
    public void input(@RequestParam(value = "username", required = true) String name){
        System.out.println(name);
    }
}

​ 前臺的URL地址:http://localhost:8080/user?username=abc

  • @PathVariable

    @PathVariable註解的作用就是從URL裡面讀取引數值,可以在@RequestMapping裡面新增佔位符{paramName},如http://localhost:8099/user/xxx/xxx/

    @Controller
    public class TestController {
    
        @ResponseBody
        @RequestMapping(value = "/user/{username}/{id}")
        public void input(@PathVariable("username") String name, @PathVariable("id") int id){
            System.out.println(name);
            System.out.println(id);
        }
    }