一、請求
1.簡單參數
- 原始方式:
在原始的web程序中,獲取請求參數,需要通過HttpServletRequest對象手動獲取
@RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){String name = request.getParameter("name");String ageStr = request.getParameter("age");int age = Integer.parseInt(ageStr);System.out.println(name + age);return "OK";}
- SpringBoot方式
簡單參數:參數名與形參變量名相同,定義形參即可接收參數
//Springboot方式@RequestMapping("/simpleParam")public String simpleParam(String name,Integer age){System.out.println(name + age);return "OK";}
?如果方法形參名與請求參數名稱不匹配,可以使用@RequestParam完成映射
注意事項:@RequestParam中的required屬性默認為true,代表該請求參數必須傳遞,如果不傳遞將報錯。該參數是可選的,可以設置為false
@RequestMapping("/simpleParam")public String simpleParam(@RequestParam(name = "name") String username, Integer age){System.out.println(username + age);return "OK";}
2.實體參數
- 簡單實體對象:請求參數名與形參對象屬性名相同,定義POJO接收即可
3.數組集合參數
- 數組參數:請求參數名與形參數組名稱相同且請求參數為多個,定義數組類型形參即可接收參數?
@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";}
- 數組集合參數:通過注解RequestParam綁定參數
@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";}
4.日期參數
- 使用@DateTimeFormat注解完成日期參數格式轉換
@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime){System.out.println(updateTime);return "OK";}
5.Json參數
- Json數據鍵名與形參對象屬性名相同,定義POJO類型形參即可接收參數,需要使用@RequestBody標識
@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user) {System.out.println(user);return "OK";}
6.路徑參數
- 通過請求URL直接傳遞參數,使用{...}來標識該路徑參數,需要使用@PathVariable獲取路徑參數
@RequestMapping("/path/{id}")public String pathParam(@PathVariable Integer id) {System.out.println(id);return "OK";}
獲取多個路徑參數
@RequestMapping("/path/{id}/{name}")public String pathParam(@PathVariable Integer id,@PathVariable String name) {System.out.println(id);System.out.println(name);return "OK";}
二、響應
1.@ResponseBody
- 類型:方法注解、類注解
- 位置:Controller方法上
- 作用:將方法返回值直接響應,如果返回值類型是實體對象/集合,將會轉換為JSON格式響應
- 說明:@RestController=@Controller+@ResponseBody
2.統一響應結果
- 統一響應結果封裝類
public class Result {private Integer code; //1 成功 0 失敗private String msg; //提示信息private Object data; //數據 datepublic Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Result() {}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success(Object data){return new Result(1,"success",data);}public static Result success(){return new Result(1,"success",null);}public static Result error(String msg){return new Result(0,msg,null);}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}
}
@RestController
public class ResponseController {@RequestMapping("/hello")public Result hello(){System.out.println("Hello,world");return Result.success("hello,world");}@RequestMapping("/getAddr")public Result getAddr(){Address addr = new Address();addr.setProvince("廣東");addr.setCity("深圳");return Result.success(addr);}@RequestMapping("/listAddr")public Result listAddr(){ArrayList<Object> list = new ArrayList<>();Address addr = new Address();addr.setProvince("廣東");addr.setCity("深圳");Address addr2 = new Address();addr2.setProvince("湖南");addr2.setCity("長沙");list.add(addr);list.add(addr2);return Result.success(list);}
}