• 请求 响应


    在web的前后端分离开发过程中,前端发送请求给后端,后端接收请求,响应数据给前端

    请求

    前端发送数据进行请求

    简单参数

    原始方式

    在原始的web程序中,获取请求参数,需要通过HttpServletRequest 对象手动获取。

    代码样例:

    1. //原始方式
    2. @RequestMapping("/simpleParam")
    3. public String simpleParam(HttpServletRequest request){
    4. //获取请求参数
    5. String name=request.getParameter("name");
    6. String ageStr=request.getParameter("age");
    7. int age=Integer.parseInt(ageStr);
    8. System.out.println(name+":"+age);
    9. return "OK";
    10. }

    前端测试发送的请求:

    SpringBoot方式

    简单参数:参数名与形参变量名相同,定义形参即可接收参数。

    1. //方式1
    2. @RequestMapping("/simpleParam")
    3. public String simpleParam(String name,Integer age ){
    4. System.out.println(name+":"+age);
    5. return "OK";
    6. }

    简单参数: 如果方法形参名称与请求参数名称不匹配,可以使用 @RequestParam 完成映射。

    1. //方式2
    2. @RequestMapping("/simpleParam")
    3. //这里设置name不是必须传入参数
    4. public String simpleParam(@RequestParam(name="name" ,required = false) String username, Integer age ){
    5. System.out.println(username+":"+age);
    6. return "OK";
    7. }

    注意:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false。

    SpringBoot方式会自动进行类型转换,如上面的age

    实体参数

    简单实体对象

    请求参数名与形参对象属性名相同,定义POJO接收即可

     如果对象里面有另一个对象,方式如下:

    两个对象如下:

    1. public class User {
    2. private String name;
    3. private Integer age;
    4. private Address address;
    5. }
    1. public class Address {
    2. private String province;
    3. private String city;
    4. }

    get,set等其他方法已省略

    接收方式还是不变如上

    1. //2. 实体参数
    2. @RequestMapping("/complexPojo")
    3. public String complexPojo(User user){
    4. System.out.println(user);
    5. return "OK";
    6. }

    发送请求样例如下:

     变化是多加了“点”进行访问

    数组集合方式

    数组参数

    数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

    集合参数

     集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系

     

     日期参数

    日期参数:使用 @DateTimeFormat注解完成日期参数格式转换

     JSON参数

     响应

    后端响应数据给前端

    注意转换为JSON格式

    代码样例:

    1. //响应字符串
    2. @RequestMapping("/hello")
    3. public String hello(){
    4. System.out.println("Hello World ~");
    5. return "Hello World ~";
    6. }
    7. //响应对象
    8. @RequestMapping("/getAddr")
    9. public Address getAddr(){
    10. Address addr = new Address();
    11. addr.setProvince("广东");
    12. addr.setCity("深圳");
    13. return addr;
    14. }
    15. //响应集合
    16. @RequestMapping("/listAddr")
    17. public List<Address> listAddr(){
    18. List<Address> list = new ArrayList<>();
    19. Address addr = new Address();
    20. addr.setProvince("广东");
    21. addr.setCity("深圳");
    22. Address addr2 = new Address();
    23. addr2.setProvince("陕西");
    24. addr2.setCity("西安");
    25. list.add(addr);
    26. list.add(addr2);
    27. return list;
    28. }

    运行后样例:

    响应字符串:

    1. {
    2. "code": 1,
    3. "msg": "success",
    4. "data": "Hello World ~"
    5. }

    响应对象:

    1. {
    2. "code": 1,
    3. "msg": "success",
    4. "data": {
    5. "province": "广东",
    6. "city": "深圳"
    7. }
    8. }

    响应集合:

    1. {
    2. "code": 1,
    3. "msg": "success",
    4. "data": [
    5. {
    6. "province": "广东",
    7. "city": "深圳"
    8. },
    9. {
    10. "province": "陕西",
    11. "city": "西安"
    12. }
    13. ]
    14. }

    统一响应结果

    好处就是只要返回result一个结果,提高代码复用性

     代码样例

    1. @RequestMapping("/hello")
    2. public Result hello(){
    3. System.out.println("Hello World ~");
    4. //return new Result(1,"success","Hello World ~");
    5. return Result.success("Hello World ~");
    6. }
    7. @RequestMapping("/getAddr")
    8. public Result getAddr(){
    9. Address addr = new Address();
    10. addr.setProvince("广东");
    11. addr.setCity("深圳");
    12. return Result.success(addr);
    13. }
    14. @RequestMapping("/listAddr")
    15. public Result listAddr(){
    16. List
      list = new ArrayList<>();
    17. Address addr = new Address();
    18. addr.setProvince("广东");
    19. addr.setCity("深圳");
    20. Address addr2 = new Address();
    21. addr2.setProvince("陕西");
    22. addr2.setCity("西安");
    23. list.add(addr);
    24. list.add(addr2);
    25. return Result.success(list);
    26. }

    Result对象代码:

    1. package com.ithema.pojo;
    2. /**
    3. * 统一响应结果封装类
    4. */
    5. public class Result {
    6. private Integer code ;//1 成功 , 0 失败
    7. private String msg; //提示信息
    8. private Object data; //数据 data
    9. public Result() {
    10. }
    11. public Result(Integer code, String msg, Object data) {
    12. this.code = code;
    13. this.msg = msg;
    14. this.data = data;
    15. }
    16. public Integer getCode() {
    17. return code;
    18. }
    19. public void setCode(Integer code) {
    20. this.code = code;
    21. }
    22. public String getMsg() {
    23. return msg;
    24. }
    25. public void setMsg(String msg) {
    26. this.msg = msg;
    27. }
    28. public Object getData() {
    29. return data;
    30. }
    31. public void setData(Object data) {
    32. this.data = data;
    33. }
    34. public static Result success(Object data){
    35. return new Result(1, "success", data);
    36. }
    37. public static Result success(){
    38. return new Result(1, "success", null);
    39. }
    40. public static Result error(String msg){
    41. return new Result(0, msg, null);
    42. }
    43. @Override
    44. public String toString() {
    45. return "Result{" +
    46. "code=" + code +
    47. ", msg='" + msg + '\'' +
    48. ", data=" + data +
    49. '}';
    50. }
    51. }

  • 相关阅读:
    【论文翻译】FCOS: Fully Convolutional One-Stage Object Detection
    数据仓库工具hive面试题集锦
    html解决浏览器记住密码输入框的问题
    电子学会2022年9月青少年软件编程(图形化)等级考试试卷(二级)答案解析
    Nacos-SpringBoot-配置中心
    【蓝桥杯冲击国赛计划第5天】哈希表
    餐厅点菜管理系统C语言课程设计
    微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.5 相关性算分
    Java系列之:var关键字
    Git相关操作
  • 原文地址:https://blog.csdn.net/2301_80336512/article/details/139566749