为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2023-09-13 16:53:26
下面是我的 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类注释为@Validated3)尝试用@NotNull注释createdDate字段@Valid但仍然不走运。请帮我解决这个问题。
查看完整描述

4 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

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


查看完整回答
反对 回复 2023-09-13
?
湖上湖

TA贡献2003条经验 获得超2个赞

您有一个带有某些请求正文的端点,例如;


@RestController

public class TheController {


    @PostMapping(path = "/doSomething", consumes = "application/json", produces = "application/json")

    public void post(@Valid @RequestBody AbstractDTO request) {

        //code

    }

}

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


检查这里,了解更深入的细节


查看完整回答
反对 回复 2023-09-13
?
森林海

TA贡献2011条经验 获得超2个赞

你有正确的进口吗?
我用import javax.validation.constraints.NotNull;

查看完整回答
反对 回复 2023-09-13
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

描述

  1. 就我而言,我定义 1 个父类 A 有 3 个子类 B、C、D,例如:

公共 A { 私有 B bCommand; 私有 C cCommand;私有D dCommand;}

  1. 我为3个子类中的一些字段注释了@NotNull、@NotBlank。在控制器中,我为这样的函数添加了@Valid:

@PostMapping() public ResponseEntity create(@RequestBody @Valid A
command){ }

解决方案

  1. 我为具有需要检查约束的字段的子类添加了@Valid。

  2. 示例:B、C 类有一些字段具有非空等约束

公共 A { @Valid private B bCommand; @Valid private C cCommand; 私有D dCommand;}


查看完整回答
反对 回复 2023-09-13
  • 4 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信