下面是我的 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/