下面是我的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
}
这里我尝试将createdDate字段注释为@NotNull,但它不起作用。它允许在请求正文中以及在邮递员中执行服务后不会收到任何错误。
我尝试过以下选项,但没有成功。
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 验证表单输入的示例 以供参考。
为什么要使用
@Valid
注释?
这允许您验证应用于类的数据成员的约束集。
但是,如果您的项目中有基于 XML 的配置,则必须将其添加到下面给出的 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>
/doSomething
在我的例子中,我定义1个父类A有3个子类B、C、D,例如:
我为3个子类中的一些字段注释了@NotNull,@NotBlank。 在控制器中,我为这样的函数添加了@Valid:
命令){ }解决方案
我为具有需要检查约束的字段的子类添加了@Valid。
错误导入:导入 Javax.validation.constraints.NotNull;
而不是,
正确导入:import Jakarta.validation.constraints.NotNull;