SpringMVC的使用


 

後臺接收前端傳遞的參數

以表單參數的傳遞、接收爲例
 

1、使用普通類型接收

<!-- 表單 -->
用戶名:<input name="username" type="text" /><br />
密碼:<input name="password" type="password" /><br />
年齡:<input name="age" type="number" /><br />
// controller使用普通類型接收,同名賦值
public String xxx(String username, String password, int age){

}

// 如果變量名不一致,用@RequestParam("xxx")綁定
public String xxx(String username, @RequestParam("password") String pwd, int age){

}

 

2、使用pojo類接收

// pojo類
@Setter
@Getter
public class User {
    private String username;
    private String password;
    private int age;
}
//controller使用pojo類接收。如果沒有傳遞某些成員變量,爲該類型的默認值
public String xxx(User user){

}
<!-- 表單字段的name使用pojo的成員變量 -->
用戶名:<input name="username" type="text" /><br />
密碼:<input name="password" type="password" /><br />
年齡:<input name="age" type="number" /><br />

 

3、使用擴展類接收

// 擴展類
@Setter
@Getter
public class UserExt {
    private User user;
    //...  //其它成員
}
// controller使用擴展類接收
public String xxx(UserExt userExt){

}
<!-- 表單字段的name使用擴展類的成員變量。注意:是擴展類的成員變量,不是controller中的擴展類形參 -->
用戶名:<input name="user.username" type="text" /><br />
密碼:<input name="user.password" type="password" /><br />
年齡:<input name="user.age" type="number" /><br />

 

4、其它

  • 單選框用String接收,複選框用String[ ]接收,複選框的name使用數組名

  • 日期使用Date接收,表單使用type=“date”。如果不進行相關計算,也可使用String接收。表單也可使用type=“text”,但使用text日期格式只能是 年/月/日 ,需要嚴格校驗格式。

  • 批量操作,用數組或List接收。比如視圖以表格形式列出了多個商品的信息,管理員在頁面上修改了多個商品的信息,提交修改時可以使用Goods[ ]或List來傳遞數據。注意:如果數組、List的元素是自定義的類,比如Goods、User,後臺不能直接使用數組、List接收,需要包裝一下數組、List

// 使用包裝類包裝數組|List
@Setter
@Getter
public class GoodsArrayVO {
	private Goods[] goodsArray;
    // private List<Goods> goodsList;
}
// controller使用數組|List的包裝類來接收
public String xxx(GoodsArrayVO goodsArrayVO){
	Goods[] goodsArray = goodsArrayVO.getGoodsArray();
	//.....

}
<!-- 和普通擴展類一樣,表單字段使用擴展類的成員變量 -->
Goods1:<br />
<input type="hidden" name="id" value="001" />
商品名稱:<input name="goodsArray[0].name" type="text"><br />
商品價格:<input name="goodsArray[0].price" type="number"><br /><br />

Goods2:<br />
<input type="hidden" name="id" value="002" />
商品名稱:<input name="GoodsArray[1].name" type="text"><br />
商品價格:<input name="goodsArray[1].price" type="number"><br /><br />

 

controller向視圖傳遞數據

// 方式一 使用Model作爲形參,返回視圖名,會自動傳遞Model,不用返回Model
public String xxx(Model model){
    model.addAttribute("username", "chy");
    return "index";
}

// 方式二 使用ModelAndView,需返回ModelAndView
public ModelAndView xxx(){
    ModelAndView mav = new ModelAndView("index");  //指定視圖名
    mav.addObject("username", "chy1");  //傳遞數據
    return mav;
}

傳遞的數據,key是String,value可以是任何類型

 

controller的返回值類型

  • string 視圖名
  • ModelAndView
  • 如果使用@ResponseBody,返回值可以是任何類型,會自動轉換爲json對象、json數組返回給瀏覽器

 

url映射

@GetMapping("/api/v1/xxx")  //只處理get方式的請求
@PostMappping("/api/v1/xxx")  //只處理post方式的請求

@RequestMapping("/api/v1/xxx")  //可處理所有請求方式


// 可指定要處理的請求方式、映射路徑,都是數組{ }
@RequestMapping(method = {RequestMethod.GET,RequestMethod.POST}, path = {"/api/v1/xxx1","/api/v1/xxx2"})

// 只有1個值時,可以缺省{ }
@RequestMapping(method = RequestMethod.GET, path = "/api/v1/xxx1")

// 只配置path時,可以缺省屬性名,默認就是path
@RequestMapping({"/api/v1/xxx1","/api/v1/xxx2"})

 

restful風格

@GetMapping("/user/{id}")
public String findUser(@PathVariable int id){ //@PathVariable修飾變量
}

@GetMapping("/user/{user_id}")
public String findUser(@PathVariable("user_id") int userId){ //名稱不一致時,要指定綁定哪個{}
}

@GetMapping("/product/{type}/{id}")
public String findProduct(@PathVariable String type,@PathVariable int id) { //有多個時,1個@PathVariable修飾1個變量
    
}

 
常用的請求方式

請求方式 應用 說明 對應CRUD
GET 獲取資源 安全、冪等 R(Retrieve 讀取)
POST 創建資源 非安全、非冪等 C
PUT 更新資源 非安全、冪等 U
DELETE 刪除資源 非安全、冪等 D

其實post、put都可以創建、更新資源

  • post主要用於創建資源,如果資源已存在會覆蓋,即更新;
  • put主要用於更新資源,如果資源不存在會先創建,比如根據id更新用戶信息,如過指定id的用戶不存在,會先創建該id的記錄(其它字段使用默認值),再更新
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章