Я реализую @RestController
и понял, что @Valid
работает с @RequestBody
или @ModelAttribute
параметрами метода @GetMapping
, но не с параметром @RequestAttribute
.
Чтобы получить проверенный аннотированный параметр @RequestAttribute
, я должен пометить свой класс Controller с помощью @Validated
.
, следуя моему коду:
Controller
@Log4j2
@RestController
@RequestMapping("/test/api/v1/entity")
public class MyController extends SomeController {
@GetMapping("/getInfo")
public ResponseEntity<<MyResponse>> infoStatus (RequestParam(required = false) String inputStr,
@Valid @RequestAttribute ObjectToValidate objToValidate){
//Any stuff here
}
}
Бин для проверки
@Getter
@Setter
@Valid
public class ObjectToValidate {
@NotNull
@NotEmpty
private String anyCode;
}
В результате anyCode не проверяется, чтобы не быть ни нулевым, ни пустым. Если я аннотирую MyController с помощью @Validate
, параметр ObjectToValidate
будет подтвержден, как и ожидалось. Если я поменяю контроллер следующим образом, проверка также сработает.
@Log4j2
@RestController
@RequestMapping("/test/api/v1/entity")
public class MyController extends SomeController {
@ModelAttribute
public ObjectToValidate addToModel(@RequestAttribute ObjectToValidate
objToValidate) { return objToValidate; }
@GetMapping("/getInfo")
public ResponseEntity<MyResponse> infoStatus (
@RequestParam(required = false) String inputStr,
@Valid @ModelAttribute ObjectToValidate objToValidate
){
//Any stuff here
}
}
Пожалуйста, не могли бы вы объяснить, почему?