Проект

Общее

Профиль

Validaion

@Configuration
public class ValidatorConfig {

    @Bean
    public Validator validator() {
        ValidatorFactory factory = Validation.byProvider(HibernateValidator.class)
                .configure()
                // Установить fail_fast в true, если вы хотите проверить все, установить в false или отменить настройку
                .addProperty("hibernate.validator.fail_fast", "true")
                .buildValidatorFactory();
        return factory.getValidator();
    }
}
public class User {

    @NotBlank(message = "Имя пользователя не может быть пустым")
    private String name;

    @Max(value = 120, message = "Возраст не может превышать 120 лет")
    private int age;

    @NotNull
    @Size(min = 8, max = 20, message = "Пароль должен быть больше 8 цифр и меньше 20 цифр")
    private String password;

    @Email(message = "Пожалуйста, введите почтовый ящик, который соответствует формату")
    private String email;

}
@RestController
@RequestMapping("/users")
public class UserController {

@PostMapping
public User addUser(@Valid @RequestBody User user, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
    }

    return user;
 }
}
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResultInfo<?> validationErrorHandler(MethodArgumentNotValidException ex) {
        // То же самое, чтобы получить объект BindingResult, а затем получить сообщение об ошибке
        // Если fail_fast был включен ранее, фактически будет только одно сообщение
        // Если нет, может быть больше
        List<String> errorInformation = ex.getBindingResult().getAllErrors()
                .stream()
                .map(ObjectError::getDefaultMessage)
                .collect(Collectors.toList());
        return new ResultInfo<>(400, errorInformation.toString(), null);
    }
}
public class ResultInfo<T> {
    private int code;
    private String message;
    private T body;

    public ResultInfo(int code, String message, T body) {
        this.code = code;
        this.message = message;
        this.body = body;
    }

    public ResultInfo(int code, String message) {
        this(code, message, null);
    }

    public ResultInfo(String message) {
        this(200, message, null);
    }
}
{
    "code": 400,
    "message": "Пароль должен содержать более 8 цифр и менее 20 цифр",
    "body": null
}