簡體   English   中英

@NotNull 注釋在 Spring Boot 應用程序中不起作用

[英]@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;

描述

  1. 在我的例子中,我定義了 1 個父類 A 有 3 個子類 B、C、D,例如:

公共 A { 私人 B bCommand; 私有 C 命令; 私有 D 命令; }

  1. 我為 3 個子類中的某些字段注釋了 @NotNull、@NotBlank。 在 Controller 中,我為這樣的函數設置了 @Valid:

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

解決方案

  1. 我將@Valid 用於具有需要檢查約束的字段的子類。
  2. 示例:B 類、C 類有一些字段具有 not null 等約束

public A { @Valid private B bCommand; @Valid private C cCommand; 私有 D 命令; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM