Проверка при загрузке Spring

#spring-boot #validation

#весенняя загрузка #проверка

Вопрос:

Я не понимаю, почему, когда я отправляю запрос POST с недопустимым numSeatAvailable . Ошибка не возвращается. Я не знаю, пропустил ли я что-нибудь. Кто-нибудь может мне помочь, пожалуйста?

Это мой класс запросов

 import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import java.sql.Time;
import java.sql.Date;

@Setter
@Getter
@ToString
public class RideRequest {

    private Date date;
    private Time time;
    private String destination;
    private String modelName;
    private int modelYear;

    @Min(value = 18, message = "Age should not be less than 18")
    @Max(value = 150, message = "Age should not be greater than 150")
    private int numSeatAvailable;

    private String rideIntro;
    private Long driverId;
    private Long rideId;
}
  

Это мой контроллер

 @PostMapping("/createRide")
public String createRide(@Valid @RequestBody RideRequest rideRequest) {
    System.out.println("Hello");
    rideService.createRide(rideRequest);
    return "created";
}
  

Комментарии:

1. Можете ли вы поделиться своим файлом build.gradle или pom.xml файл?

Ответ №1:

В вашем контроллере вы должны вернуть message, info, когда DTO недействителен.

Что касается проверки, у вас есть 3 способа:

(1) Добавить зависимость валидатора гибернации

 <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.6.Final</version>
</dependency>
  

Затем добавьте аннотации для компонента validate (DTO: объект передачи данных).

(2) Ах, у вас есть простой способ: используйте spring-boot-starter-validator (он также является производным от Hibernate validator с предварительной и автоматической настройкой). Смотрите учебник по адресу https://reflectoring.io/bean-validation-with-spring-boot / . Я предлагаю вам использовать этот способ.

(3) Используйте проверку Java (стандартная библиотека). Руководство: https://spring.io/guides/gs/validating-form-input /

Ответ №2:

Вы можете использовать библиотеку javax.validation.constraints

 <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version><!--$NO-MVN-MAN-VER$ -->
        </dependency>
  

Добавьте свои ограничения в свою модель DTO
, например :

 @NotNull(groups = ProductCreation.class,message = "fieldName.notSetted")
@NotBlank(groups = ProductUpdate.class,message = "fieldName.notSetted")
@Min(value=1, message="fieldName must be equal or greater than 0")
  

И вы можете создать функцию для проверки :

  private void checkIfReadyToSave(ClassDTO yourDTO) {
    Set<ConstraintViolation<ClassDTO>> violations =
        validator.validate(yourDTO, groupCreation.class);
    if (!violations.isEmpty()) {
      Map<String, Object> body = new LinkedHashMap<>();
      Set<String> keys =
          violations.stream().map(ConstraintViolation::getMessage).collect(Collectors.toSet());
      body.put("errors", keys);
      throw new BeanValidationException(ErrorConstants.ClassDTO_MISSING_ERROR_MSG, body.toString());
    }
  }