У меня есть контроллер, сущность и валидатор для моего проекта.
Контроллер выглядит примерно так:
@RequestMapping("foo")
@Controller
public class RequestMapper {
@RequestMapping("jsonCreate")
@ResponseBody
public String createInfo(@Valid @ModelAttribute("node") String nodeJson) throws JsonParseException, JsonMappingException, IOException {
Foo obj = new ObjectMapper().readValue(nodeJson, Foo.class);
///missing validation
fooDao.save(obj);
}
}
@Entity
public class Foo {
@NotNull
private String bar;
///getters, setters, constructors omitted
}
public class FooValidator {
@NotEmpty(message = "Bar cannot be null")
@Size(min = 2, message = "Bar must be a minimum of 2 characters long")
private String bar;
////getters, setters and constructors omitted
}
Итак, когда я пытаюсь вызвать createInfoметод с JSON: {"bar": "a"}
Я не получаю никакой проверки, которую я делаю в форме (не неожиданно, но все еще ошибка, которую нужно исправить).
Может ли кто-нибудь указать мне, что должно произойти, чтобы FooValidator правильно исследовал объект Foo?
Я попытался поместить это в FooValidator:
public<T> List<String> validate (T input) {
List<String> errors = new ArrayList<>();
Set<ConstraintViolation<T>> violations = Validation.buildDefaultValidatorFactory().getValidator().validate(input);
if (violations.size() > 0) {
for (ConstraintViolation<T> violation : violations) {
errors.add(violation.getPropertyPath() + " " + violation.getMessage());
}
}
}
И затемВызов
new FooValidator().validate(foo);
, но ничего не произошло с длиной не менее 2 символов.