news 2026/11/3 10:46:54

Restful风格请求响应和数据库封装映射

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Restful风格请求响应和数据库封装映射

目录

一、Restful风格的请求

二、Apifox软件

三、定义响应数据统一格式的java实体类:

四、后端接收路径指定请求方式:

五、从请求中接收简单参数@RequestParam

六、请求体中接收参数@RequestBody

七、请求路径中接收简单参数@PathVariable

八、公共路径抽取 @RequestMapping("共有路径")

九、实体类和数据库字段的封装映射


一、Restful风格的请求

根据请求方式描述操作:更加的规范,统一,容易维护

Restful风格URL

请求方式

含义

http://localhost:8080/user/1

GET

查询ID为1的用户

http://localhost:8080/user/1

DELETE

删除ID为1的用户

http://localhost:8080/user

POST

新增用户

http://localhost:8080/user

PUT

修改用户

二、Apifox软件

Restful风格的请求,浏览器地址栏只支持发出 GET 请求。

其他请求方式就要借助第三方软件"Apifox"软件模拟前端向后端发送的不同方式的请求。

1、新建HTTP接口

2、选择请求方式和请求地址,点击发送即可模拟前端发送的请求。

三、定义响应数据统一格式的java实体类:

实体类Result:

包含成员:

1、Integer code:响应代码:1成功,0失败

2、String msg:返回信息

3、Object data:响应的数据

包含静态成员方法:

1、Result success():操作成功响应,无数据

2、Result success(Object object):操作成功响应(带数据),传入数据data属性中。

3、Result error(String msg):操作失败响应,传入错误信息。

四、后端接收路径指定请求方式:

1、不限定请求方式:@RequestMapping

@RequestMapping("/users") ***此注释表示不限定请求方式*** public Result list(){ System.out.println("查询全部用户数据"); List<user> userList = userService.findAll(); return Result.success(userList); }

2、限定请求方式

GET:

方式1:@RequestMapping(value = "/users",method = RequestMethod.GET)

方式2:@GetMapping("/users") --------SpringBoot提供的注解(推荐,简洁)

POST:

@PostMapping("users")

DELETE:

@DeleteMapping("/user/1")

PUT:

@PutMapping("/user")

五、从请求中接收简单参数@RequestParam

场景:删除id为5的用户数据

请求方式:DELETE

url:/users?id=5

方式一(原始,繁琐):基于HttpServletRequest 获取请求参数

@DeleteMapping("/users") public Result deleteById(HttpServletRequest request) { String idStr = request.getParameter("id"); //通过对象中获取键为id的值,获取到字符串类型id。 int id = Integer.parseInt(idStr); //字符串转化为int类型,方便后续操作 后续操作略---- return Result.success(); //删除不需带数据返回。 }

方式二(推荐):Spring提供的@RequestParam("")注解

@DeleteMapping("/users") public Result deleteById(@RequestParam("id") Integer userId) { 操作略---- return Result.success(); //删除不需带数据返回。 }

注意:一旦声明了@RequestParam注解,该参数在请求时必须传递,如果不传递将会报错。

解决此问题要修改该注解内参数,修改过后,不传参数id将会是null:

public Result deleteById(@RequestParam(value = "id",required = false) Integer userId)

方式三(推荐):如果请求参数名与形参变量名相同,直接定义方法形参即可接收(省略@RequestParam注解)

@DeleteMapping("/users") public Result deleteById(Integer id) { 操作略---- return Result.success(); //删除不需带数据返回。 }

六、请求体中接收参数@RequestBody

场景:接收JSON格式的请求参数用于新增用户

请求方式:POST

url:/users

前提:JSON数据的键名与方法形参对象的属性名相同,并需要使用@RequestBody注解标识

请求体JSON:

{ "name": "张三", "age": "19" }

实体类:

@Data //lombok提供get set方法 @AllArgsConstructor //lombok提供全参构造 @NoArgsConstructor //lombok提供无参构造 public class User { private String name; private Integer age; }

请求处理类@Requestbody使用:

@PostMapping("/users") public Result add(@RequestBody User user) { userService.add(user); //service层传入对象进行添加。 return Result.success(); }

七、请求路径中接收简单参数@PathVariable

场景:根据前端请求携带的路径参数ID查询回显

请求方式:GET

url:/users/1

请求处理类: @PathVariable注解,获取路径中id的值,赋值给形参userId:

@GetMapping("/users/{id}") public Result getInfo(@PathVariable("id") Integer userId) { User user = userService.getInfo(userId); return Result.success(user); }

如果形参的名字跟请求路径参数的名字一致,就可以省略@PathVariable注解的值:

@GetMapping("/users/{id}") public Result getInfo(@PathVariable Integer id) { User user = userService.getInfo(id); return Result.success(user); }

多个路径参数:

@GetMapping("/users/{id}/{name}") public Result getInfo(@PathVariable Integer id,@PathVariable String name) { User user = userService.getInfo(id); return Result.success(user); }

八、公共路径抽取 @RequestMapping("共有路径")

场景:多个接收类都包含同样的路径/users,就可以抽取公共路径

1、GetMapping("/users"):获取全部成员信息。走URL

2、GetMapping("/users/{id}"):获取指定id的成员信息。走URL

3、DeleteMapping("/users"):删除成员信息。走URL

4、PostMapping("/users"):新增成员信息。走请求体

5、PutMapping("/users"):修改成员信息。走请求体

请求处理类上添加@RequestMapping注解:

@RequestMapping("/users") //抽取公共路径/users @RestController public class UserController{ @GetMapping //省略路径 public Result findAll() { 获取成员列表 } @PutMapping //省略路径 public Result updateById(@RequestBody User user) { 修改成员信息 } @GetMapping("/{id}") //省略公共路径,包含独有路径 public Result GetInfo(@PathVariable Integer id) { 根据路径参数查询回显成员信息 } }

九、实体类和数据库字段的封装映射

1、自动映射前提:

实体类属性名和数据库表的字段名一致,MyBatis会自动封装。

2、如果字段名与实体类属性名不一致,以下是解决方案:

数据库字段:create_time、update_time。

实体类成员:createTime、updateTime。

方式一:Mapper层中,使用@Results和@Result注解进行手动映射

@Results({ @Result(column = "create_time",property = "createTime"), @Result(column = "update_time",property = "updateTime") }) @Select("select * from users") //查询users表中所有字段。 public List<User> findAll(); //返回给一个List集合。

方式二:Mapper层sql语句中,给数据库中字段起别名

@Select("select id,name,create_time createTime,update_time updateTime from users") public List<User> findAll();

方式三(推荐):如果字段名与属性名符合驼峰命名规则,使用Mybatis开启驼峰命名映射,yml配置文件写入以下

映射要求:xxx_Abc == xxxAbc

mybatis: configuration: map-underscore-to-camel-case: true //此行表示开启驼峰命名映射
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 10:44:38

华为校招机考真题 AI方向 2026-10-28 选择题【真题及答案解析】

华为校招&实习机试在线OJ刷题系统 &#xff5c; 在线OJ注册使用教程 1、视觉骨干网络里&#xff0c;某一层卷积输出特征图的通道数通常由什么决定&#xff1f; A. 输入特征的通道数 B. 卷积核的空间尺寸 C. 该层卷积核的个数 D. 卷积的步长 2、下列激活函数中&#x…

作者头像 李华
网站建设 2026/11/3 10:43:50

Kubernetes权威指南——深入掌握Pod(Pod调度(二))

深入掌握Pod9、玩转Pod调度9.5、Taints和Tolerations&#xff08;污点和容忍&#xff09;9.6、Pod Priority Preemption&#xff1a;Pod优先级调度9、玩转Pod调度 9.5、Taints和Tolerations&#xff08;污点和容忍&#xff09; 前面介绍的NodeAffinity节点亲和性&#xff0c;…

作者头像 李华
网站建设 2026/11/3 10:40:25

大模型开发入门指南:小白也能学会,高薪就业全解析(收藏版)

本文详细介绍了大模型开发的工作内容、学习路径、就业前景及薪资水平。大模型开发工程师负责优化通用大模型以满足企业需求&#xff0c;应用场景广泛&#xff0c;就业选择多样。学习核心技能包括大模型基础原理、提示词工程、模型微调与应用部署、行业业务场景落地能力。入行条…

作者头像 李华
网站建设 2026/11/3 10:36:26

使用Linux系统部署.Net程序

与Windows系统部署.Net程序作对比&#xff1a; 部署环节WindowsLinux发布程序Visual Studio 发布 / dotnet publish相同上传文件远程桌面复制SCP / WinSCP安装运行环境.NET Hosting BundleASP.NET Core Runtime&#xff0c;或使用自包含发布WebApi 运行IIS ASP.NET Core Modu…

作者头像 李华
网站建设 2026/11/3 10:36:07

海外版外卖系统:对账表下载之后为什么和后台对不上

做海外版外卖系统&#xff0c;财务把对账表下载下来&#xff0c;和后台屏幕上的合计对不上&#xff0c;先不要改金额。多数是两边用的条件不一样&#xff1a;一座城还是全部城、含不含试单、含不含未付款、截止到哪一天。条件不同&#xff0c;数字就不会相同。一、对不上时先对…

作者头像 李华