2

私のカスタムクラスは次の方法で実装されています:

@RequiredIfSet.List({
    @RequiredIfSet(field = "isFillingOutForSomeoneElse", dependentField = "reporterName", message = "may not be null"),
})

ConstraintViolations をループし、DTO と ajax を介してフロントエンドにホイップすると、小さな String[] に getMessage() と getPropertyPath() が含まれます。

すべてに対して正常に動作しますが、フィールドではなく、リストであるため、これによってpropertyPathが設定されていません。どのように設定するか、フィールド名を取得して送り返すことができますか? 私を夢中にさせていて、いくつかの回避策を試しました。また、注意してください。ループする場所は次のとおりです。

public static <T> EntityValidationDTO GetEntityValidationDTO(Set<ConstraintViolation<T>> cv){
        List<String[]> invalidFields = new ArrayList<String[]>();
        Iterator<ConstraintViolation<T>> iterator = cv.iterator();
        while(iterator.hasNext()) {
            ConstraintViolation<T> i = iterator.next();
            String message = i.getMessage();
            String property = i.getPropertyPath().toString();
            invalidFields.add(new String[] { property, message });
        }
        EntityValidationDTO EVDTO = new EntityValidationDTO();
        EVDTO.setStatus("fail");
        EVDTO.setInvalidFields(invalidFields);
        return EVDTO;
    }
4

0 に答える 0