Spring JSR-303 ConstraintValidator не поддерживает list.add () - PullRequest
0 голосов
/ 16 мая 2018

Я встретил такое неверное объяснение: я сделал проверку, используя мою собственную аннотацию @Category и класс CategoryValidator implements ConstraintValidator<Category, String>

Все о list.add (), который вызывает (без правильной работы)):

Ошибка обработки запроса;вложенное исключение: javax.validation.ValidationException: HV000028: непредвиденное исключение во время вызова isValid.

Может ли кто-нибудь дать мне какое-либо объяснение?

CategoryValidator

@Component
public class CategoryValidator implements ConstraintValidator<Category, String> {

@Autowired
ProductService productService;

List<String> allowedCategories;

@Override
public void initialize(Category constraintAnnotation) {
    allowedCategories = Arrays.asList(constraintAnnotation.allowedCategories());
}

@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
    // This .add() it not working here
    // allowedCategories.add("Laptop"); 

    for (String category : allowedCategories) {
        if (category.equalsIgnoreCase(value)) {
            return true;
        }
    }
    return false;
}
}

Категория

@Target( { METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = CategoryValidator.class)
@Documented
public @interface Category {
String message() default "{com.ehr.webstore.validator.Category.message}";

Class<?>[] groups() default {};

public abstract Class<? extends Payload>[] payload() default {};

String[] allowedCategories();
}

Продукт

public class Product {
/* [...] */
@Category(allowedCategories = {"Laptop", "Tablet", "Smart Phone", "Another"})
private String category;
/* [...] */
}

1 Ответ

0 голосов
/ 16 мая 2018

Что ж, было бы проще с полной трассировкой стека, но я думаю, что ваша проблема в том, что вы не можете добавить элемент в List, созданный Arrays.asList(): он неизменен.

Если вы хотите иметь возможность добавлять новые элементы, вам нужно сделать что-то вроде: new ArrayList<>( Arrays.asList( ... ) ).

...