У меня возникла проблема запуска пользовательской проверки ограничений на трикотаж. Я хотел бы активировать ограничение на метод или статический метод. То, что я пробовал, это добавить пользовательскую аннотацию и @ValidateOnExecution
поверх метода, но пользовательский класс проверки еще не был запущен.Список проверки бобов <?> по статическому методу или геттерам
@LocationIsValid
@ValidateOnExecution
public static List<Double> getLocation(String location) {
...
}
Я подозревал, что проблема боба аннотации не поддерживает статический метод, поэтому я удалил статическое ключевое слово и получить доступ к методу, создавая новый объект. Однако пользовательский механизм проверки LocationIsValid
не был активирован.
В результате я положил завод валидатора для проверки этой переменной вручную.
public static List<Double> getLocation(String location) {
...
// split the location string into a list of double
...
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
validator.validate(location, LocationIsValid.class);
}
Но все же пользовательские ограничения не сдвинутся с места. Я надеюсь, что кто-то может дать мне понять, что делать дальше, или другое предложение по решению этой проблемы.
Подробнее
Он работает должным образом, когда аннотаций находится на верхней части поля ресурсов.
public class Product {
...
@LocationIsValid
private List<Double> location;
...
}
Обновлено
Даже я изменил метод к обычному методу экземпляра, он по-прежнему не работает. Обратите внимание, что у меня есть два перегруженных метода: один - это ресурс, другой - для преобразования строки в локации.
Модель продукта
public class Product {
@Id
@JsonSerialize(using = ObjectIdSerializer.class)
private ObjectId id;
@Size(min = 5)
private String name;
@NotNull
@LocationIsValid
private List<Double> location;
private Date dateCreated;
private Date dateModified;
public Product() {
}
public List<Double> getLocation() {
return location;
}
@ValidateOnExecution
@LocationIsValid
public List<Double> getLocation(String location) {
String[] locationString = location.split(";");
if (locationString.length != 2) {
return null;
}
List<Double>locations = new ArrayList<Double>();
for (int i = 0; i < locationString.length; i++) {
locations.add(Double.parseDouble(locationString[i]));
}
return locations;
}
// Other setters getters
}
ресурс продукта
@GET
public ProductList getProducts(@QueryParam("near") String location) {
// parse the locations variable
Product product = new Product();
// did not work
// I have placed a breakpoint on the LocationIsValid
List<Double> locations = product.getLocation(location);
}
Примечание: Я уверен, что проблема не находится в LocationIsValid, как это работает правильно, когда я подтверждено его в качестве субъекта @Valid Product product
я являюсь используя Джерси 2.4.1 с проверкой майнинга-бина 2.4.1 зависимость
Являются ли другие ограничения работоспособными? – chrylis
он работает правильно, когда аннотация помещается в поле, которое является переменной ресурса. – Lunayo