后端参数校验

后端参数校验

实验目的

1.理解后端参数校验的重要性。

2.掌握 Spring Boot 参数校验机制。

3.掌握常用校验注解(@NotNull、@NotBlank、@Min 等)。

4.掌握 @Valid 的使用方法。

5.结合全局异常处理,实现校验错误统一返回。

实验环境

开发工具:IntelliJ IDEA

构建工具:Maven

测试工具:Postman或浏览器

AI工具:通义灵码

实验要求

在校园二手交易系统中,实现全局异常处理功能:

1.对商品新增接口进行参数校验

2.字段不能为空、长度限制、数值范围校验

3.校验失败时返回统一 Result 格式

4.结合实验08,实现校验异常统一处理

实验内容

第一部分:问题引入

当前系统问题:

❌ 可以提交空数据

❌ 价格可以为负数

❌ 字段长度无限制

❌ 数据不安全

目标:接口自动校验参数合法性

第二部分:引入依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-validation</artifactId>

</dependency>

第三部分:实体类添加校验注解

public class Goods {

private Long id;

@NotBlank(message = "商品名称不能为空")

private String title;

@NotBlank(message = "商品描述不能为空")

private String description;

@NotNull(message = "价格不能为空")

@Min(value = 1, message = "价格必须大于0")

private Double price;

@NotBlank(message = "发布人不能为空")

private String seller;

}

常用注解说明:

|-----------|----------|
| 注解 | 说明 |
| @NotNull | 不能为 null |
| @NotBlank | 字符串不能为空 |
| @Min | 最小值 |
| @Max | 最大值 |
| @Size | 长度限制 |

第四部分:Controller 开启校验

1.新增商品接口

@PostMapping("/goods")

public Result<String> add(@RequestBody @Valid Goods goods){

goodsMapper.insert(goods);

return Result.success("添加成功");

}

作用:

@Valid 用于开启校验

第五部分:处理校验异常

1.在GlobalExceptionHandler 中新增:

@ExceptionHandler(MethodArgumentNotValidException.class)

public Result<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {

StringBuilder errorMessage = new StringBuilder();

e.getBindingResult().getFieldErrors().forEach(error -> {

if (errorMessage.length() > 0) {

errorMessage.append("; ");

}

errorMessage.append(error.getField()).append(": ").append(error.getDefaultMessage());

});

return Result.error(400, errorMessage.toString());

}

第六部分:测试功能

1.正常请求

{

"title": "二手耳机",

"description": "几乎全新",

"price": 100,

"seller": "张三"

}

返回:

{

"code": 200,

"message": "操作成功",

"data": "添加成功"

}

2.字段为空

{

"title": "",

"description": "测试",

"price": 100,

"seller": "张三"

}

返回:

{

"code": 400,

"message": "title: 商品标题不能为空",

"data": null

}

3.价格非法

{

"title": "测试商品",

"description": "测试",

"price": -10,

"seller": "张三"

}

返回:

{

"code": 400,

"message": "price: 商品价格必须大于 0",

"data": null

}

相关推荐
噢,我明白了9 小时前
java中唯一键和幂等键的应用
java·后端
程序猿乐锅10 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
GreenTea10 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
考虑考虑10 小时前
synchronized字符串常量
java·后端·java ee
颜进强11 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
GetcharZp11 小时前
定位不再一个个吐坐标:英伟达 LocateAnything 上手全攻略
后端
需要82611 小时前
分布式事务:Seata AT/TCC/SAGA 的取舍与踩坑
java·spring boot·分布式·spring·spring cloud
m0_5873830012 小时前
深圳24小时自助健身房解决方案实战:从系统架构到部署指南
java·人工智能·spring boot·spring·系统架构·需求分析
郑州光合科技余经理12 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
我叫黑大帅12 小时前
Go日志库工程选型与逃逸分析评测报告
后端·面试·go