对于SpringBoot中的参数校验,我们可以使用JSR-303规范提供的注解对Controller层的方法参数进行校验。具体实现方式如下:
- 引入依赖
首先需要引入spring-boot-starter-validation依赖,可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 标注注解
在需要进行校验的方法参数上标注注解,例如@NotNull、@NotBlank、@Min、@Max等等。例如我们有一个用户类:User,它有两个属性username和age,现在我们需要在Controller层的方法中对User的参数进行校验,可以在User类的属性上标注注解,例如:
public class User {
@NotBlank(message = "用户名不能为空")
private String username;
@Min(value = 18, message = "年龄不能低于18岁")
@Max(value = 60, message = "年龄不能高于60岁")
private Integer age;
// Getter和Setter方法省略
}
- 在Controller层方法中使用@Validated注解和BindingResult对象
在Controller中的方法上使用@Validated注解对方法的参数进行校验,同时需要在方法参数中使用BindingResult对象来接收错误信息,例如:
@RestController
@RequestMapping("/user")
public class UserController {
@PostMapping("/save")
public ResponseEntity saveUser(@RequestBody @Validated User user, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
String errorMessage = bindingResult.getFieldError().getDefaultMessage();
return ResponseEntity.badRequest().body(errorMessage);
}
// do something with valid user
return ResponseEntity.ok("User saved successfully");
}
}
上述代码中的@RequestBody注解用于将HTTP请求体绑定到方法参数,@Validated注解用于对方法参数进行校验,BindingResult对象用于接收校验结果。
当出现校验错误时,bindingResult对象中会有错误信息,我们可以通过getFieldError().getDefaultMessage()方法获取默认的错误信息。
- 示例1:校验GET请求参数
假设用户想要查询某个区间的商品价格,根据输入的价格区间进行查询。我们可以定义一个PriceRange类,它有两个属性:minPrice和maxPrice。在Controller中的方法上用@Validated和PriceRange对象进行校验,示例代码如下:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class PriceRange {
@NotNull(message = "最低价格不能为空")
@Min(value = 0, message = "最低价格不能小于0")
private BigDecimal minPrice;
@NotNull(message = "最高价格不能为空")
private BigDecimal maxPrice;
// Getter和Setter方法省略
}
@RestController
@RequestMapping("/product")
public class ProductController {
@GetMapping("/list")
public ResponseEntity getProductList(@Validated PriceRange priceRange, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
String errorMessage = bindingResult.getFieldError().getDefaultMessage();
return ResponseEntity.badRequest().body(errorMessage);
}
// do something with valid price range
return ResponseEntity.ok("Product list retrieved successfully");
}
}
访问接口:http://localhost:8080/product/list?minPrice=10&maxPrice=20
注:注意使用@NotNull对minPrice进行校验
- 示例2:校验POST请求参数
假设用户要新增一个订单,订单包含商品标识符、购买数量、收货人信息等属性。我们可以定义一个Order类,假设其中有两个属性productId和orderQuantity,在Controller中的方法上用@Validated和Order对象进行校验,示例代码如下:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Order {
@NotBlank(message = "商品标识符不能为空")
private String productId;
@NotNull(message = "订单数量不能为空")
@Min(value = 1, message = "订单数量不能小于1")
private Integer orderQuantity;
// Getter和Setter方法省略
}
@RestController
@RequestMapping("/order")
public class OrderController {
@PostMapping("/add")
public ResponseEntity addOrder(@RequestBody @Validated Order order, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
String errorMessage = bindingResult.getFieldError().getDefaultMessage();
return ResponseEntity.badRequest().body(errorMessage);
}
// do something with valid order
return ResponseEntity.ok("Order added successfully");
}
}
测试代码:
curl --location --request POST 'http://localhost:8080/order/add' \
--header 'Content-Type: application/json' \
--data-raw '{
"productId": "123",
"orderQuantity": 2
}'
注:注意使用@NotBlank对productId进行校验
以上就是关于SpringBoot中controller参数校验的完整攻略,希望对您有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于SpringBoot中controller参数校验的使用 - Python技术站