关于java:@NotNull注释在Spring Boot应用程序中不起作用。为什么?

@NotNull annotation is not working in Spring boot application. Why?

下面是我的DTO课程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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,但它不起作用。它允许在请求正文中,并且在邮递员中执行服务后未出现任何错误。

我尝试了以下选项,但没有运气。

1)尝试添加maven依赖项。

1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    spring-boot-starter-validation</artifactId>
</dependency>

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

3)尝试使用@NotNull注释createdDate字段@Valid,但还是不走运。

请帮助我解决此问题。


您的端点具有一些请求正文,例如;

1
2
3
4
5
6
7
8
@RestController
public class TheController {

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

您需要为请求对象添加@Valid批注。只有这样,您才能为/doSomething端点的AbstractDTO启用验证。

在此处查看更多详细信息


您的DTO是正确的。

来自Spring Boot验证表单输入示例:

使用@Valid批注。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
@Controller
public class Controller {

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

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

为什么要使用@Valid批注? -这使您可以验证应用于类的数据成员的一组约束。

此外,您必须在applicationContext.xml(来源:此处)中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
<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>

您输入的内容正确吗?
我使用import javax.validation.constraints.NotNull;