@NotNull 注释在 spring 引导中不起作用

@NotNull annotation is not working in spring boot

我是 Spring Boot 的新手,我遇到了这个问题。

即使我不提供“数据”,我仍然得到 200 OK

你认为为什么会这样?

感谢任何帮助。

最佳

当您使用 @NotNull 时,您是在防止 String data 具有空值。但是在邮递员中,当您发送带有空值的数据时,您实际上是在发送带有空字符串 "" 的数据。要防止 null 值和空字符串,请使用 @NotBlank.

@RestController
@Validated
public class HelloController {

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

如果您想将 data 作为 null 发送以检查 @NotNull 是否有效,只需从邮递员参数中取消选中它(不要发送)。它应该在您的应用程序中引发异常,即 data 不能为空。

在这种情况下,您应该使用 @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 包中添加 @NotNull 注释并再次点击 api 时,您应该会收到 503 内部服务器错误。

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

使用@NotBlank:

您可以使用来自 javax.validation.constraints

的 @NotBlank 实现相同的行为

@NotNull 验证对象不为空。

@NotBlank 检查字符序列(例如字符串)的修剪长度是否不为空。

你会更多地在字符串上使用@NotBlank here