springboot 一个类作为接口请求体,在构造后直接运行某段验证代码,有问题并能抛出异常,不用创造函数
时间: 2024-09-14 15:04:03 浏览: 49
完美解决request请求流只能读取一次的问题
5星 · 资源好评率100%
在Spring Boot中,如果你想在一个类作为接口请求体后直接运行验证代码,并且在有问题时抛出异常,你可以使用Bean Validation来实现这个需求。Spring Boot提供了对JSR-303/JSR-380(Bean Validation)标准的支持,通过这种方式,你可以在类的字段上添加约束注解来实现自动验证。
下面是一个简单的例子:
首先,添加依赖到你的`pom.xml`文件中(如果你使用的是Maven):
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
```
然后,定义一个请求体类,并在需要验证的字段上添加相应的注解:
```java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class MyRequestBody {
@NotNull(message = "姓名不能为空")
@Size(min = 2, max = 20, message = "姓名长度必须在2到20个字符之间")
private String name;
@NotNull(message = "年龄不能为空")
private Integer age;
// getters and setters
// 在构造函数中进行验证
public MyRequestBody() {
// 这里可以添加构造后的验证逻辑
validateSelf();
}
private void validateSelf() {
if (name == null) {
throw new IllegalArgumentException("姓名不能为空");
}
if (name.length() < 2 || name.length() > 20) {
throw new IllegalArgumentException("姓名长度必须在2到20个字符之间");
}
// 其他验证...
}
}
```
在Spring Boot的控制器中,你可以这样使用这个类作为请求体:
```java
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@PostMapping("/submit")
public ResponseEntity<String> submit(@RequestBody MyRequestBody requestBody) {
// 这里可以处理逻辑
return ResponseEntity.ok("请求处理成功");
}
}
```
如果请求体不满足`MyRequestBody`类中的验证规则,Spring会自动抛出一个`MethodArgumentNotValidException`异常,然后你可以自定义异常处理器来处理这个异常。
阅读全文