Wol*_*359 4 validation rest spring spring-boot
我有一个简单的控制器方法:
@GetMapping("/search")
public List<Result> search(@RequestParam @Valid @NotNull @Size(min = 4) String query) {
return searchService.search(query);
}
Run Code Online (Sandbox Code Playgroud)
当我省略“查询”参数时,正如预期的那样,我收到 400 Bad Request。
使用这些查询参数测试方法不起作用。
除了最后一个测试之外,所有测试都应该返回“400 Bad Request”。
"/search" --> actual 400 Bad Request, test passes
"/search?query=" --> actual 200 Ok, expected 400 because @Size(min=4)
"/search?query=a" --> actual 200 Ok, expected 400 because @Size(min=4)
"/search?query=ab" --> actual 200 Ok, expected 400 because @Size(min=4)
"/search?query=abc" --> actual 200 Ok, expected 400 because @Size(min=4)
"/search?query=abcd" --> actual 200 Ok, test passes
Run Code Online (Sandbox Code Playgroud)
为什么 @Size(min=4) 注释被忽略?
验证 RequestParameters 不像开箱即用的那样工作。
您可以将参数包装在一个类中
class SearchRequest {
@Size(min=4)
@NotNull
private String query;
...
}
Run Code Online (Sandbox Code Playgroud)
然后将您的控制器代码更改为
@GetMapping("/search")
public List<Result> search(@ModelAttribute @Valid SearchRequest searchRequest) {
return searchService.search(searchRequest.getQuery());
}
Run Code Online (Sandbox Code Playgroud)
现在这是一种方法,你想要的可能可以使用类上的@Validated 注释来实现,但我对此一无所知,但它似乎在这里涵盖:https : //sdqali.in/blog /2015/12/04/validating-requestparams-and-pathvariables-in-spring-mvc/
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |