java - @NotNull 注释在 Spring boot 应用程序中不起作用

标签 java spring spring-boot spring-mvc

下面是我的 DTO 类(class)。

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
}

这里我尝试将createdDate字段注释为@NotNull,但它不起作用。它允许在请求正文中以及在 postman 中执行服务后不会收到任何错误。

我尝试了以下选项,但没有成功。

1)尝试添加maven依赖。

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

2)尝试将DTO类注释为@Validated

3)尝试用@NotNull注释createdDate字段@Valid,但仍然不走运。

请帮我解决这个问题。

最佳答案

您的 DTO 类是正确的。您必须使用@Valid注释。

例如:

@Controller
public class Controller {

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

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

引用此Spring Boot Example On Validating Form Input 供引用。

为什么要使用@Valid注解?

这允许您验证应用于类的数据成员的约束集。

<小时/>

但是,如果您的项目中有基于 XML 的配置,则必须将其添加到下面给出的 applicationContext.xml 中。 (来源:here)

<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>

关于java - @NotNull 注释在 Spring boot 应用程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58182553/

相关文章:

Java:String concat vs StringBuilder - 优化了,我该怎么办?

java - 如何解决java.lang.NoClassDefFoundError : org/hibernate/SessionFactory?

java - 为什么当我启动服务器时 spring 会清空我的数据库表?

java - 使用 JPA 映射双向一对多 Hibernate 实体

java - 具有级联 VersionLockingPolicy 的父对象不会获取对私有(private)子对象的数据库更改

java - 如何以编程方式绘制特定的可绘制资源?

java - 在 Spring XML 中使用任意数量的参数调用 Java 构造函数

java - Hibernate无法将java.lang.Integer字段com.XXX.XXX.XXX.Cooperative.id设置为java.util.ArrayList

java - Spring boot - 在 @Qualifier 上使用可配置值

java使用字符串拆分解析某个小节