SpringBoot 对DTO进行参数校验
在Spring Boot中,你可以使用javax.validation
中的注解来对DTO进行参数验证。首先,你需要在你的DTO类中使用这些注解,如@NotNull
、@Size
、@Min
、@Max
等。然后,在Controller中的方法参数前添加@Valid
注解来触发验证。如果验证失败,Spring会抛出MethodArgumentNotValidException
异常,你可以处理这个异常来给客户端返回错误信息。
以下是一个简单的例子:
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class UserDTO {
@NotNull(message = "用户名不能为空")
@Size(min = 3, max = 20, message = "用户名长度必须在3到20个字符之间")
private String username;
@NotNull(message = "年龄不能为空")
@Min(value = 18, message = "年龄必须大于等于18岁")
private Integer age;
// getters and setters
}
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public String createUser(@Valid @RequestBody UserDTO userDTO) {
// 验证通过后的逻辑
return "用户创建成功";
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, Object> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, Object> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return errors;
}
}
在这个例子中,如果UserDTO
中的数据验证失败,handleValidationExceptions
方法会被调用,它会返回一个包含错误信息的Map。
评论已关闭