Аннотация @NotNull не работает в загрузочном приложении Spring. Почему? - PullRequest
0 голосов
/ 01 октября 2019

Ниже приведен мой класс DTO.

public class AbstractDTO extends BaseDTO {

    private Integer createdBy;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT)
    @NotNull(message = "createdDate may not be null")
    private LocalDateTime createdDate;

    private Integer lastModifiedBy;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_FORMAT)
    private LocalDateTime lastModifiedDate;

    private Boolean isActive;

    // getter & setters
}

Здесь я пытаюсь аннотировать поле createDate как @NotNull, но оно не работает. Это позволяет в теле запроса и после выполнения сервиса в почтальоне не получать никаких ошибок.

Я пробовал ниже варианты, но не повезло.

1) Попытался добавить maven зависимость.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2) Попытка аннотировать класс DTO как @ Validated

3) Попытка аннотировать поле createDate @Valid с @NotNull, новсе еще не удача.

Пожалуйста, помогите мне с этим вопросом.

Ответы [ 3 ]

1 голос
/ 01 октября 2019

Ваш DTO правильный.

С Пример ввода формы проверки пружинного чехла :

Использовать аннотацию @Valid.

Например:

@Controller
public class Controller {

    @PostMapping("/")
    public String checkPersonInfo(@Valid AbstractDTO abstractDTO, BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            return "page";
        }
        return "";
    }
}

Зачем использовать аннотацию @Valid? - Это позволяет вам проверить набор ограничений, применяемых к элементам данных класса.

Более того, вы должны добавить это ниже в applicationContext.xml (Источник: здесь ):

<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean
            class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
            <property name="validator" ref="validator" />
        </bean>
    </property>
</bean> 

    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    </bean>
1 голос
/ 01 октября 2019

У вас есть конечная точка с некоторым телом запроса, например;

@RestController
public class TheController {

    @PostMapping(path = "/doSomething", consumes = "application/json", produces = "application/json")
    public void post(@Valid @RequestBody AbstractDTO request) {
        //code
    }
}

Вам необходимо иметь @Valid аннотацию для объекта запроса. Только при этом вы сможете включить проверку для AbstractDTO для /doSomething конечной точки.

Проверьте здесь , для более подробной информации

1 голос
/ 01 октября 2019

У вас есть правильный импорт?
Я использую import javax.validation.constraints.NotNull;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...