【问题标题】:String max length validation is not working in Spring字符串最大长度验证在 Spring 中不起作用
【发布时间】:2021-06-01 16:00:03
【问题描述】:

在我的一个应用程序中,我有一个端点,我想从中验证其输入参数。

此方法接收的参数之一是一个字符串,我尝试设置它的最大长度,但它不起作用。当我使用超过 100 个字符的字符串调用端点时,我可以毫无问题地进行调用,并且不应该被允许

问题是我需要以尽可能少的更改来执行此验证,因为此方法是从我不管理的其他应用程序调用的,并且执行任何类型的修改都会很昂贵:将属性合并到豆子

@SecuredApi(securityLevels = {SecuredApiLevel.COMPANY, SecuredApiLevel.USER})
@GetMapping("/example")
public ResponseEntity<SearchRestDTO> search(
    **@Valid @Size(max=100)** @RequestParam(value = "query") @ApiParam(required = true, value = "The query that is searched") String query,
    return new ResponseEntity<>(searchService.search(query)), HttpStatus.OK);
}

【问题讨论】:

  • 你必须在类级别上使用@Validated。没有它,将不会选择验证。

标签: java spring rest validation


【解决方案1】:

在类级别上,使用@Validated,然后使用@Valid 注释的验证应该可以正常工作。

这是测试的示例代码 -

@Validated
@RestController
public class TestController {

    @GetMapping("/example")
    public ResponseEntity<String> search(
        @Valid @Size(max=5) @RequestParam(value = "query") String query) {
        return new ResponseEntity<>("String Length is valid.", HttpStatus.OK);
    }
}

此外,在您有完整的对象要验证之前,不需要@Valid。

需要以下依赖项 -

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

【讨论】:

  • 嗨@Akash,感谢您的回答。我已经使用“已验证”进行了测试,但验证仍然无法正常工作
  • @vcima 如果可能的话,你能把你的 POM 贴在这里吗?
  • 我已经用工作代码更新了我的答案(稍微调整了你的示例代码)。请检查。您还需要为生产使用添加错误处理程序和适当的错误消息。
猜你喜欢
  • 1970-01-01
  • 2012-06-14
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
相关资源
最近更新 更多