簡體   English   中英

@NotNull 注釋在 spring 引導中不起作用

[英]@NotNull annotation is not working in spring boot

我是 Spring 引導的新手,我遇到了這個問題。

在此處輸入圖像描述

即使我不提供“數據”,我仍然得到 200 OK

在此處輸入圖像描述

你認為為什么會這樣?

任何幫助表示贊賞。

最好的

當您使用@NotNull時,您會阻止String data具有 null 值。 但是在 postman 中,當您發送帶有空值的數據時,您實際上是在發送帶有空字符串""的數據。 為了防止null值和空字符串使用@NotBlank

@RestController
@Validated
public class HelloController {

    @GetMapping(value = "/path")
    public String getData(@Valid @PathParam("data") @NotBlank String data) {
        return data;
    }
}

如果您想以null的形式發送data以檢查@NotNull是否有效,只需從 postman 參數中取消選中它(不要發送它)。 它應該在您的應用程序中引發異常,即data不能是 null。

在這種情況下,您應該使用@RequestParam而不是@PathParams 但驗證也可以應用於@PathParam

@GetMapping(path = "extra")
public String doExtraThing(@RequestParam("data") String data) {
    return "Data is: " + data;
}

使用@NotNull

如果你直接從瀏覽器點擊這個 api

http://localhost:8080/demo/extra

您應該在控制台中得到一些東西,因為您的默認請求參數是強制性的。

2021-03-06 08:55:20.872  WARN 2936 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'data' is not present]

使其可選使用

@RequestParam(value = "data", required = false) String data

現在當你嘗試點擊 http://localhost:8080/demo/extra?data=,你應該得到

Data is:

現在,當您將其設置為required = false並從javax.validation.constraints package 添加@NotNull注釋並再次點擊 api 時,您應該會收到 503 內部服務器錯誤。

javax.validation.ConstraintViolationException: doExtraThing.data: must not be null

使用 @NotBlank

您可以使用 javax.validation.constraints 中的javax.validation.constraints實現相同的行為

@NotNull驗證 object 不是 null。

@NotBlank檢查字符序列(例如字符串)的修剪長度是否為空。

你會在這里更多地在字符串上使用@NotBlank

暫無
暫無

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

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