亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

@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 關注
  • 497 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號