Boa tarde,
Criei a anotação abaixo:
@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface EventoFieldMandatory { }
e tenho duas classe
@Data public class TesteDTO extends CreateUpdateDTO { private Boolean isExibirCampos; }
E uma super calsse
@Data public class CreateUpdateDTO { @EventoFieldMandatory() private LocalTime hora; @EventoFieldMandatory() private @NotNull LocalDate data; }
Caso a flag isExibirCampos seja true eu preciso verificar se os campos hora e data são nulos. Com isso criei esse metodo para receber a flag isExibirCampos e verificar a anotação:
public class Validate {
public static void main(String[] args) throws ValidationException { TesteDTO dto = new TesteDTO(); dto.setExibirCamposAgenda(true);
ValidateEvento.valideteMandatoryFilds(dto.isExibirCampos(), dto.getClass());
}
public static void valideteMandatoryFilds(Boolean isMandatory, Class<?> objeto) throws ValidationException { if (isMandatory) { List fields = getFields(objeto);
for (Field field : fields) {
if (field.isAnnotationPresent(EventoFieldMandatory.class)) {
String nomeCampo = field.getName();
try {
field.setAccessible(true);
Object valorCampo = field.get(objeto);
if (valorCampo == null) {
throw new ValidationException("O campo " + nomeCampo + " não deve ser nulo.");
}
} catch (IllegalAccessException e) {
throw new RuntimeException("Erro ao acessar o campo " + nomeCampo, e);
}
}
}
}
} @NotNull private static List getFields(Class<?> objeto) { List campos = new ArrayList<>(); campos.addAll(Arrays.asList(objeto.getDeclaredFields()));
Class<'?'> superClasse = objeto.getSuperclass();
if (Objects.nonNull(superClasse)) {
campos.addAll(Arrays.asList(superClasse.getDeclaredFields()));
}
return campos;
}
Porem não consigo recuperar o valor do atribudo field.get(objeto); ele me lanca a exception Method threw 'java.lang.IllegalArgumentException' exception.
Já tentei fazer field.get(objeto.getSuperclass()) Como a varievel que preciso recuperar está na superClasse Porem tenho o mesmo erro.
Alguem teria alguma ideia da onde estou errando?