[英]@NotNull annotation is not working in Spring boot application
下面是我的 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 class 是正确的。 您必须使用@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 验证表单输入的启动示例以供参考。
为什么要使用@Valid
注解?
这允许您验证应用于 class 的数据成员的一组约束。
但是,如果您的项目中有基于 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>
您有一个带有一些请求主体的端点,例如;
@RestController
public class TheController {
@PostMapping(path = "/doSomething", consumes = "application/json", produces = "application/json")
public void post(@Valid @RequestBody AbstractDTO request) {
//code
}
}
您需要为请求 object 提供@Valid
注释。 只有这样,您才能为/doSomething
端点的AbstractDTO
启用验证。
在这里查看更多详细信息
你有正确的进口吗?
我使用import javax.validation.constraints.NotNull;
描述
公共 A { 私人 B bCommand; 私有 C 命令; 私有 D 命令; }
@PostMapping() public ResponseEntity create(@RequestBody @Valid A
命令){ }
解决方案
public A { @Valid private B bCommand; @Valid private C cCommand; 私有 D 命令; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.