Я пытаюсь проверить JSON @RequestBody с помощью org.springframework.validation.Validator в Spring WebFlux, но получаю «Внутренняя ошибка сервера» со следующим сообщением.
java.lang.IllegalStateException: Failed to resolve argument 1 of type 'org.springframework.validation.BindingResult' on public reactor.core.publisher.Mono ....
Класс валидатора:
@Component
public class GreetingValidator implements Validator {
@Override
public boolean supports(Class<?> type) {
return GreetingSchema.class.equals(type);
}
@Override
public void validate(Object obj, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "content", "content.empty", "Content is required");
GreetingSchema greeting = (GreetingSchema) obj;
}
}
Класс контроллера REST:
@RestController
@RequestMapping("/greeting")
public class GreetingController {
@Autowired
private GreetingValidator validator;
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
@GetMapping
public GreetingSchema get() {
return new GreetingSchema("Hello, World!");
}
@PostMapping(consumes = "application/json")
public Mono post(@Validated @RequestBody GreetingSchema body, BindingResult result) {
if (result.hasErrors()) {
return Mono.just(result.getFieldErrors());
}
return Mono.just("valid");
}
}
Когда я попытался после удаления аннотации @RequestBody из метода публикации следующим образом
public Mono post(@Validated GreetingSchema body, BindingResult result)
то он работает без «Внутренней ошибки сервера», но не может проверить JSON @RequestBody.
{"content": "Hello, Xyz!"}