@notnull注解在spring boot中不起作用

2vuwiymt  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(885)

我是新来的 Spring 开机,我有这个问题。

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

你认为这是为什么?
感谢您的帮助。
最好的

2mbi3lxu

2mbi3lxu1#

你应该使用 @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` 并添加 `@NotNull` 注解自 `javax.validation.constraints` 包并再次点击api,您应该会得到503内部服务器错误。

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

使用@notblank:
您可以使用@notblank from实现相同的行为 `javax.validation.constraints` @notnull验证对象是否为null。
@notblank检查字符序列(例如字符串)的修剪长度不为空。
你可以在这里更多的字符串上使用@notblank
c0vxltue

c0vxltue2#

当你使用 @NotNull 你在阻止 String data 具有空值。但是在postman中,当你用空值发送数据时,实际上是用空字符串发送的 "" . 防止两者兼而有之 null 值和空字符串使用 @NotBlank .

@RestController
@Validated
public class HelloController {

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

如果你想发送 data 作为 null 检查是否 @NotNull 工作,只是取消选中它从 Postman 参数(不发送它)。它应该在应用程序中引发一个异常 data 不能为空。

相关问题