下面我将详细讲解“springboot整合JSR303参数校验与全局异常处理的方法”的完整攻略。
一、JSR303参数校验
JSR303,又称Bean Validation,是一个JavaEE标准的框架,可以很方便地对JavaBean的字段进行校验,以保证数据的有效性和安全性。在springboot中,我们可以通过集成hibernate-validator来实现JSR303参数校验。
1、添加依赖
在pom.xml文件中添加以下依赖:
<!-- JSR303参数校验 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
2、编写JavaBean
在JavaBean的字段上添加相应的校验注解,例如:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@Size(min = 6, max = 10, message = "密码长度必须为6-10个字符")
private String password;
//getter和setter方法
}
3、在Controller中使用参数校验
在Controller的方法中,可以直接加上@Valid注解,表明要进行参数校验,例如:
@RestController
public class UserController {
@PostMapping("/login")
public String login(@Valid @RequestBody User user) {
//处理用户登录逻辑
return "success";
}
}
4、处理校验不通过的异常
如果校验不通过,会抛出MethodArgumentNotValidException异常。为了更友好的提示用户错误信息,我们可以自定义全局异常处理器来处理这个异常,并返回自定义的错误信息。
二、全局异常处理
在前面的JSR303参数校验中,当校验不通过时,会抛出MethodArgumentNotValidException异常,为了更好地用户体验,我们需要对异常进行处理,并返回友好的错误信息。下面介绍如何利用@ControllerAdvice和@ExceptionHandler来实现全局异常处理。
1、编写全局异常处理器
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
FieldError error = e.getBindingResult().getFieldError();
String message = error.getDefaultMessage();
return message;
}
}
2、测试Controller
@RestController
public class UserController {
@PostMapping("/login")
public String login(@Valid @RequestBody User user) {
//处理用户登录逻辑
return "success";
}
}
三、完整示例
我来给出一个完整的例子,包括JSR303参数校验和全局异常处理的代码。
1、添加依赖
在pom.xml文件中添加以下依赖:
<!-- JSR303参数校验 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
<!-- 全局异常处理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、编写JavaBean
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@Size(min = 6, max = 10, message = "密码长度必须为6-10个字符")
private String password;
//getter和setter方法
}
3、编写Controller和全局异常处理器
@RestController
public class UserController {
@PostMapping("/login")
public String login(@Valid @RequestBody User user) {
//处理用户登录逻辑
return "success";
}
}
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
FieldError error = e.getBindingResult().getFieldError();
String message = error.getDefaultMessage();
return message;
}
}
4、测试
启动springboot应用程序,并使用Postman发送HTTP POST请求,请求url为“/login”,请求体为:
{
"username": "",
"password": "123"
}
此时返回的响应体为:
用户名不能为空
另外,当请求体为:
{
"username": "admin",
"password": "123"
}
则返回的响应体为:
success
以上就是关于“springboot整合JSR303参数校验与全局异常处理的方法”的完整攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot整合JSR303参数校验与全局异常处理的方法 - Python技术站