【问题标题】:@NotNull annotation is not working in spring boot@NotNull 注解在 Spring Boot 中不起作用
【发布时间】:2021-06-04 16:29:50
【问题描述】:

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

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

你认为为什么会这样?

感谢任何帮助。

最好的

【问题讨论】:

  • 它将数据作为空字符串而不是空字符串。尝试不带任何请求参数的api调用
  • 在你的情况下,我认为你应该使用路径变量,如果它是一个强制参数,你的 api 应该像/path/{data}
  • 但是,如果我将 GET 请求作为 /path(不带 ?data)发送,也会出现同样的错误。
  • 首先应该是@RequestParam() 而不是@PathParam 检查baeldung.com/spring-request-param
  • 其次,如果你不希望你的 api 在没有数据的情况下工作,那么你需要@PathVariable 检查baeldung.com/spring-pathvariable

标签: spring spring-annotations notnull


【解决方案1】:

在这种情况下,您应该使用 @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

【讨论】:

    【解决方案2】:

    当您使用@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 不能为空的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-03
      • 2021-06-02
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2019-09-18
      • 2019-12-18
      相关资源
      最近更新 更多