Пользовательская аннотация на основе другого значения поляJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Пользовательская аннотация на основе другого значения поля

Сообщение Anonymous »

У меня возникла проблема с пользовательской аннотацией, которую я некоторое время создавал в своем приложении Micronaut REST. Мне нужна моя аннотация: прочитать значение логического поля в моем классе записи и, если оно истинно, активировать проверку.
Итак, если isCompany установлен значение true, то я хочу сделать так, чтобы аннотированные поля не были нулевыми. Если установлено значение false, эти аннотированные поля могут иметь значение null.
Однако мой текущий код работает, значение «истина» равно жестко запрограммировано, и я не могу найти способ передать значение при отправке POST.
Есть ли способ это сделать?
Пользовательский пакет аннотаций:
package com.app.annotations.messages;

import io.micronaut.context.StaticMessageSource;
import jakarta.inject.Singleton;

@Singleton
public class ValidateCompanyMessages extends StaticMessageSource {

public static final String COMPANY_MESSAGE = "must not be null";

public ValidateCompanyMessages() {
addMessage("com.app.ValidCompany.message", COMPANY_MESSAGE);
}
}

package com.app.annotations.utils;

public final class ValidateCompanyUtil {

private ValidateCompanyUtil() {
}

public static boolean isValid(Boolean isCompany, Object value) {
if (isCompany != null && isCompany) {
if (value == null || value.toString().trim().isEmpty()) {
return false;
}
}
return true;
}
}


package com.app.annotations.validators;

import com.app.annotations.ValidCompany;
import com.app.annotations.utils.ValidateCompanyUtil;

import io.micronaut.context.annotation.Factory;
import io.micronaut.validation.validator.constraints.ConstraintValidator;
import jakarta.inject.Singleton;

@Factory
class ValidateCompanyFactory {

@Singleton
ConstraintValidator companyValidator() {
return (value, annotationMetadata, context) -> ValidateCompanyUtil.isValid(true, value);
}
}

package com.app.annotations;

import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER,
ElementType.TYPE_USE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(ValidCompany.List.class)
@Constraint(validatedBy = {})
public @interface ValidCompany {
String MESSAGE = "com.app.ValidCompany.message";

String message() default "{" + MESSAGE + "}";

Class[] groups() default {};

Class

Подробнее здесь: https://stackoverflow.com/questions/785 ... ield-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»