博客 / 詳情

返回

SpringBoot工程中Web mvc 請求參數的處理(servlet)

背景分析
傳統java web應用,例如在servlet中獲取請求數據,我們可能直接HttpServletRequest
對象獲取請求中的url,參數等相關信息(request.getParameter("...")).當然我們
獲取到這些參數以後,我們可能還要進行參數的解析,類型的轉換等等.

思考:
第一:假如我們在一個傳統的servlet應用中,向服務端發送了一個這樣的請求,例如
http://localhost/findObjects?pageCurrent=1
此時服務端要獲取請求中的pageCurrent的值,並賦值給你整數變量你會怎麼做?

`String page=request.getParameter("pageCurrent");
if(page!=null&&"".equals(page)){
    Integer pageCurrent=Integer.parseInt(page);
}`

第二:假如我們在一個傳統的servlet應用中,向服務端發送了一個這樣的請求,例如
http://localhost/deleteObjects?ids=1,2,3,4,5
此時服務端要獲取請求中的ids值,然後將這個ids字符串中多個id值存儲一個整數數組,你會怎麼做?

String idsStr=request.getParameter("ids");
String []idArray=idsStr.split(",");
Integer []ids=new Integer[idArray.length];
for(int i=0;i<idArray.length;i++){
       ids[i]=Integer.parseInt(idArray[i]);
}

第三:假如我們在一個傳統的servlet應用中,向服務端發送了一個這樣的請求,例如
http://localhost/saveObject?id=10&name=20&remark=30
此時服務端獲取了請求數據以後,要將請求數據存儲到Goods對象中,你會怎麼做呢?

String id=request.getParameter("id");
String name=request.getParameter("name");
String remark=request.getParameter("remark");

Goods g=new Goods();
g.setId(Integer.parseInt(id));
g.setName(name);
g.setRemark(remark)

對於如上幾種請求參數獲取,解析,封裝.這樣的過程,在我們的程序中可能會
反覆出現,能夠對如上反覆執行的邏輯或模板性的代碼進行簡化,進而提高
開發效率?

1)直接量方式(八種基本數據類型或者封裝類,字符串類型,日期類型,數組)
2)pojo對象方式(要求pojo對象中提供與請求參數匹配的set方法)
3)map對象方式(需要使用指定註解方法中map類型參數進行描述)
4)Rest風格的url中的參數.

1)Spring MVC 控制層方法中的參數值都來自於哪個對象?request
2)Spring MVC 控制層方法參數中常用註解你知道有幾個呢?
2.1)@RequestParam (定義參數規則,例如參數是否可選,指定獲取哪個參數的值)
2.2)@DateTimeFormat (定義可以獲取的日期的日期格式)
2.3)@RequestBody(表示參數可以接收客户端post請求提交的json原生數據)
2.4)@PathVariable(表示參數的值來自url中{}表達式中的數據)

3)Spring MVC控制方法上定義請求方式,請求url的註解你瞭解的有哪些?
3.1)@RequestMapping(value="/doGet",method=RequestMethod.GET)
3.2)@GetMapping("/path") 一般應用於查詢數據的請求方式定義
3.3)@PostMapping("/path") 一般應用於添加數據的請求方式定義
3.4)@DeleteMapping("/path") 一般應用於刪除數據的請求方式定義
3.5)@PutMapping("/path") 一般應用於更新數據的請求方式定義

BUG?

1)400 (客户端向服務端傳遞的請求參數與服務端可處理的形式不匹配)
2)405 (客户端請求方式與服務端定義的請求處理方式不匹配)
3)404 (客户端請求的資源不存在)

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.