@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
我是 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
@NotNull 验证对象不为空。
@NotBlank 检查字符序列(例如字符串)的修剪长度是否不为空。
你会更多地在字符串上使用@NotBlank here