当使用@Validated注解对方法或参数进行参数校验时,如果发现参数校验不通过,可以使用异常返回JSON值方式来返回异常信息,以帮助客户端更好地处理错误信息。
以下是实现@Validated注解异常返回JSON值方式的完整攻略:
1. 添加依赖
在Maven项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2. 添加@RequestParam注解
在需要进行参数校验的方法或参数上添加@RequestParam注解,并设置对应的校验规则,例如:
public void testParam(@RequestParam @NotBlank(message = "用户名不能为空") String username,
@RequestParam @NotBlank(message = "密码不能为空") String password) {
// 方法实现代码
}
3. 添加异常处理器
在Spring Boot应用中,可以通过编写异常处理器来捕获和处理抛出的异常。在本例中,需要编写一个异常处理器来处理参数校验异常,并返回JSON格式的异常信息。
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
// 获取异常信息
BindingResult bindingResult = e.getBindingResult();
List<ObjectError> allErrors = bindingResult.getAllErrors();
// 构建返回结果
Map<String, Object> result = new LinkedHashMap<>();
result.put("code", "400");
result.put("message", "参数校验失败");
Map<String, Object> errors = new LinkedHashMap<>();
allErrors.forEach(error -> errors.put(((FieldError)error).getField(), error.getDefaultMessage()));
result.put("errors", errors);
return result;
}
}
4. 测试
使用POSTMAN等工具发送一个POST请求,请求体中包含了不合法的参数,例如:
{
"username": "",
"password": ""
}
这时会返回以下JSON格式的异常信息:
{
"code": "400",
"message": "参数校验失败",
"errors": {
"username": "用户名不能为空",
"password": "密码不能为空"
}
}
以上就是使用@Validated注解异常返回JSON值方式的完整攻略。
示例1:
首先定义实体类TestDTO如下:
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
@Data
public class TestDTO {
@NotBlank(message = "用户名不能为空")
private String username;
@NotBlank(message = "密码不能为空")
@Length(min = 6,max = 32,message = "密码长度为6~32位")
private String password;
@NotBlank(message = "邮箱不能为空")
@Email(message = "邮箱格式不正确")
private String email;
}
现在我们使用该实体类进行参数校验,修改第二步中的代码,并使用@RequestBody注解接收请求体,如下:
public void testParam(@RequestBody @Validated TestDTO testDTO) {
// 方法实现代码
}
该处理方式与第二步相比,只有@RequestBody和@Validated注解不同。
示例2:
下面我们将讨论如何使用@Validated注解对map进行参数校验。
首先定义一个Map类型的输入参数,如下:
public void testParam(@RequestParam @Validated Map<String,String> map) {
// 方法实现代码
}
这样就可以使用@Validated注解校验map中的所有参数了。例如,如果我们加入下面的校验规则:
@NotBlank(message = "map中键值对value不能为空")
那么,当map中有一个value为null或空串时,就会抛出异常信息“map中键值对value不能为空”。
以上就是针对两个示例的@Validated注解异常返回JSON值方式的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@validated注解异常返回JSON值方式 - Python技术站