当前位置: 首页 > news >正文

请求 响应

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

请求

前端发送数据进行请求

简单参数

原始方式

在原始的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方式

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

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

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

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

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

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

实体参数

简单实体对象

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

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

两个对象如下:

public class User {private String name;private Integer age;private Address address;
}
public class Address {private String province;private String city;
}

get,set等其他方法已省略

接收方式还是不变如上

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

发送请求样例如下:

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

数组集合方式

数组参数

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

集合参数

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

 

 日期参数

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

 JSON参数

 响应

后端响应数据给前端

注意转换为JSON格式

代码样例:

    //响应字符串@RequestMapping("/hello")public String hello(){System.out.println("Hello World ~");return "Hello World ~";}//响应对象@RequestMapping("/getAddr")public Address getAddr(){Address addr = new Address();addr.setProvince("广东");addr.setCity("深圳");return addr;}//响应集合@RequestMapping("/listAddr")public List<Address> listAddr(){List<Address> 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 list;}

运行后样例:

响应字符串:

{"code": 1,"msg": "success","data": "Hello World ~"
}

响应对象:

{"code": 1,"msg": "success","data": {"province": "广东","city": "深圳"}
}

响应集合:

{"code": 1,"msg": "success","data": [{"province": "广东","city": "深圳"},{"province": "陕西","city": "西安"}]
}

统一响应结果

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

 代码样例

@RequestMapping("/hello")public Result hello(){System.out.println("Hello World ~");//return new Result(1,"success","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(){List<Address> 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);}

Result对象代码:

package com.ithema.pojo;/*** 统一响应结果封装类*/
public class Result {private Integer code ;//1 成功 , 0 失败private String msg; //提示信息private Object data; //数据 datapublic Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}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 +'}';}
}

相关文章:

  • Java 环境配置 -- Java 语言的安装、配置、编译与运行
  • 如何使用Python中的列表解析(list comprehension)进行高效列表操作
  • 美银美林:看好铜价涨到12000美元,这类铜矿企业弹性更大
  • 鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】
  • LeetCode|2331. Evaluate Boolean Binary Tree
  • Linux基础 (十五):TCP 协议特点和UDP协议
  • 06016传感器原理与应用202207
  • R语言数据探索和分析23-公共物品问卷分析
  • 物联网设计竞赛_8_Jetson Orin Nano安装pytorch与torchvision
  • 申请医疗设备注册变更时,需要补充考虑网络安全的情况有哪些?
  • locale本地化库学习
  • Linux应用 sqlite3编程
  • 如何学习自动化测试?(附教程)
  • 【iOS】内存泄漏检查及原因分析
  • 学习分享-注册中心Naocs的优雅上下线
  • express.js的介绍及使用
  • JavaScript函数式编程(一)
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Protobuf3语言指南
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue官网教程学习过程中值得记录的一些事情
  • 从0实现一个tiny react(三)生命周期
  • 跨域
  • Spring第一个helloWorld
  • ​2020 年大前端技术趋势解读
  • ​flutter 代码混淆
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (2020)Java后端开发----(面试题和笔试题)
  • (笔试题)分解质因式
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (三)docker:Dockerfile构建容器运行jar包
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • ./和../以及/和~之间的区别
  • .bat批处理出现中文乱码的情况
  • .net Stream篇(六)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net知识和学习方法系列(二十一)CLR-枚举
  • /var/spool/postfix/maildrop 下有大量文件
  • [ C++ ] 类和对象( 下 )
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [CareerCup] 14.5 Object Reflection 对象反射
  • [CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
  • [CTF]php is_numeric绕过
  • [C语言]——C语言常见概念(1)
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]
  • [IDF]摩斯密码