Java'da sıkça kullanılan 100 adet javax validation anotasyonu



Bu liste, Java'da sıkça kullanılan 100 adet javax validation anotasyonunu ve örnek kullanımlarını içeriyor. Bu anotasyonlar, veri doğrulama işlemlerini kolaylaştırır ve uygulamanızın güvenilirliğini artırır.

Bu anotasyonları kullanırken dikkat edilmesi gereken bazı önemli noktalar şunlardır:

  1. Doğru anotasyonu seçin: Her anotasyon belirli bir amaca hizmet eder. Örneğin, @NotNull ile @NotEmpty arasındaki farkı anlamak önemlidir.

  2. Uygun hata mesajları kullanın: Her anotasyona açıklayıcı ve kullanıcı dostu hata mesajları ekleyin.

  3. Özel doğrulama ihtiyaçları için kendi anotasyonlarınızı oluşturun: Örneğin, @ValidPassword gibi özel anotasyonlar oluşturabilirsiniz.

  4. Gruplar kullanın: @GroupSequence gibi anotasyonlarla doğrulama sırasını kontrol edebilirsiniz.

  5. Nesne grafiği doğrulaması için @Valid kullanın: İç içe nesneleri doğrulamak için @Valid anotasyonunu kullanın.

  6. Performansı göz önünde bulundurun: Çok sayıda karmaşık doğrulama, uygulamanızın performansını etkileyebilir.

Bu anotasyonları kullanarak, uygulamanızda veri bütünlüğünü sağlayabilir ve kullanıcı hatalarını minimize edebilirsiniz.


import javax.validation.constraints.*;

import javax.validation.groups.*;

import javax.validation.Valid;


public class ValidationExample {


// 1. @NotNull: Değerin null olmamasını sağlar

@NotNull(message = "Name cannot be null")

private String name;


// 2. @NotEmpty: String, Collection, Map veya Array'in boş olmamasını sağlar

@NotEmpty(message = "Email cannot be empty")

private String email;


// 3. @NotBlank: String'in boş olmamasını ve en az bir karakter içermesini sağlar

@NotBlank(message = "Username cannot be blank")

private String username;


// 4. @Size: String, Collection, Map veya Array'in boyutunu kontrol eder

@Size(min = 8, max = 20, message = "Password must be between 8 and 20 characters")

private String password;


// 5. @Min: Sayısal değerin minimum değerini kontrol eder

@Min(value = 18, message = "Age should not be less than 18")

private int age;


// 6. @Max: Sayısal değerin maksimum değerini kontrol eder

@Max(value = 100, message = "Age should not be greater than 100")

private int maxAge;


// 7. @DecimalMin: Ondalık sayının minimum değerini kontrol eder

@DecimalMin(value = "0.01", message = "Price should not be less than 0.01")

private BigDecimal price;


// 8. @DecimalMax: Ondalık sayının maksimum değerini kontrol eder

@DecimalMax(value = "9999.99", message = "Price should not be greater than 9999.99")

private BigDecimal maxPrice;


// 9. @Positive: Sayının pozitif olmasını sağlar

@Positive(message = "Quantity must be positive")

private int quantity;


// 10. @PositiveOrZero: Sayının pozitif veya sıfır olmasını sağlar

@PositiveOrZero(message = "Stock count must be positive or zero")

private int stockCount;


// 11. @Negative: Sayının negatif olmasını sağlar

@Negative(message = "Temperature must be negative")

private int temperature;


// 12. @NegativeOrZero: Sayının negatif veya sıfır olmasını sağlar

@NegativeOrZero(message = "Balance must be negative or zero")

private BigDecimal balance;


// 13. @Future: Tarihin gelecekte olmasını sağlar

@Future(message = "Expiry date must be in the future")

private Date expiryDate;


// 14. @FutureOrPresent: Tarihin şimdi veya gelecekte olmasını sağlar

@FutureOrPresent(message = "Start date must be now or in the future")

private LocalDateTime startDate;


// 15. @Past: Tarihin geçmişte olmasını sağlar

@Past(message = "Birth date must be in the past")

private Date birthDate;


// 16. @PastOrPresent: Tarihin şimdi veya geçmişte olmasını sağlar

@PastOrPresent(message = "End date must be now or in the past")

private LocalDateTime endDate;


// 17. @Email: E-posta adresinin geçerli olmasını sağlar

@Email(message = "Email should be valid")

private String emailAddress;


// 18. @Pattern: String'in belirli bir regex desenine uymasını sağlar

@Pattern(regexp = "^[0-9]{10}$", message = "Phone number must be 10 digits")

private String phoneNumber;


// 19. @AssertTrue: Boolean değerin true olmasını sağlar

@AssertTrue(message = "Terms must be accepted")

private boolean termsAccepted;


// 20. @AssertFalse: Boolean değerin false olmasını sağlar

@AssertFalse(message = "Subscription should not be canceled")

private boolean subscriptionCanceled;


// 21. @Digits: Sayının belirli bir basamak sayısına sahip olmasını sağlar

@Digits(integer = 5, fraction = 2, message = "Number must have 5 digits and 2 decimal places")

private BigDecimal amount;


// 22. @CreditCardNumber: Kredi kartı numarasının geçerli olmasını sağlar

@CreditCardNumber(message = "Invalid credit card number")

private String creditCardNumber;


// 23. @Currency: Para biriminin geçerli olmasını sağlar

@Currency(message = "Invalid currency")

private MonetaryAmount monetaryAmount;


// 24. @EAN: EAN (European Article Number) kodunun geçerli olmasını sağlar

@EAN(message = "Invalid EAN code")

private String eanCode;


// 25. @ISBN: ISBN (International Standard Book Number) kodunun geçerli olmasını sağlar

@ISBN(message = "Invalid ISBN")

private String isbn;


// 26. @Length: String'in belirli bir uzunlukta olmasını sağlar

@Length(min = 5, max = 50, message = "Description must be between 5 and 50 characters")

private String description;


// 27. @Range: Sayının belirli bir aralıkta olmasını sağlar

@Range(min = 1, max = 5, message = "Rating must be between 1 and 5")

private int rating;


// 28. @SafeHtml: HTML içeriğinin güvenli olmasını sağlar

@SafeHtml(message = "HTML content is not safe")

private String htmlContent;


// 29. @URL: URL'nin geçerli olmasını sağlar

@URL(message = "Invalid URL")

private String websiteUrl;


// 30. @Valid: İç içe nesnelerin de doğrulanmasını sağlar

@Valid

private Address address;


// 31. @ScriptAssert: Nesne düzeyinde özel doğrulama kuralları uygulamak için kullanılır

@ScriptAssert(lang = "javascript", script = "_this.startDate.isBefore(_this.endDate)", message = "End date must be after start date")

public class Event {

private LocalDateTime startDate;

private LocalDateTime endDate;

}


// 32. @ConstraintComposition: Birden fazla kısıtlamayı birleştirmek için kullanılır

@ConstraintComposition(CompositionType.OR)

@NotNull

@Size(min = 1)

private List<String> tags;


// 33. @Payload: Doğrulama hatalarına ek bilgi eklemek için kullanılır

@NotNull(message = "Name cannot be null", payload = Severity.Error.class)

private String severityName;


// 34. @GroupSequence: Doğrulama gruplarının sırasını belirlemek için kullanılır

@GroupSequence({First.class, Second.class})

public interface OrderedChecks {}


// 35. @ConvertGroup: Doğrulama gruplarını dönüştürmek için kullanılır

public class User {

@ConvertGroup(from = Default.class, to = AdvancedChecks.class)

@Valid

private Address address;

}


// 36. @ReportAsSingleViolation: Birleşik kısıtlamaların tek bir ihlal olarak raporlanmasını sağlar

@ReportAsSingleViolation

@Pattern(regexp = "[A-Z][a-z]+")

@Size(min = 2, max = 30)

private String firstName;


// 37. @CodePointLength: Unicode kod noktalarına göre String uzunluğunu kontrol eder

@CodePointLength(min = 1, max = 10, message = "Emoji must be between 1 and 10 code points")

private String emoji;


// 38. @ConstraintComposition: Birden fazla kısıtlamayı birleştirmek için kullanılır

@ConstraintComposition(CompositionType.AND)

@NotNull

@Size(min = 1)

private Set<String> roles;


// 39. @DurationMax: Sürenin maksimum değerini kontrol eder

@DurationMax(days = 30, message = "Duration cannot exceed 30 days")

private Duration subscriptionDuration;


// 40. @DurationMin: Sürenin minimum değerini kontrol eder

@DurationMin(hours = 1, message = "Duration must be at least 1 hour")

private Duration minimumRentalDuration;


// 41. @CNPJ: Brezilya şirket vergi numarasının (CNPJ) geçerli olmasını sağlar

@CNPJ(message = "Invalid CNPJ")

private String cnpj;


// 42. @CPF: Brezilya vatandaşlık numarasının (CPF) geçerli olmasını sağlar

@CPF(message = "Invalid CPF")

private String cpf;


// 43. @TituloEleitoral: Brezilya seçmen kimlik numarasının geçerli olmasını sağlar

@TituloEleitoral(message = "Invalid Titulo Eleitoral")

private String tituloEleitoral;


// 44. @ParametersScriptAssert: Metod parametrelerinin doğrulanmasını sağlar

@ParametersScriptAssert(lang = "javascript", script = "arg0 > arg1", message = "First argument must be greater than second")

public void compareNumbers(int first, int second) {}


// 45. @EmailValidator: Özel e-posta doğrulama kuralları uygulamak için kullanılır

@EmailValidator(regexp = ".*@company\\.com", message = "Email must be a company email")

private String companyEmail;


// 46. @NIP: Polonya vergi kimlik numarasının (NIP) geçerli olmasını sağlar

@NIP(message = "Invalid NIP")

private String nip;


// 47. @PESEL: Polonya ulusal kimlik numarasının (PESEL) geçerli olmasını sağlar

@PESEL(message = "Invalid PESEL")

private String pesel;


// 48. @REGON: Polonya istatistik numarasının (REGON) geçerli olmasını sağlar

@REGON(message = "Invalid REGON")

private String regon;


// 49. @UniqueElements: Koleksiyondaki öğelerin benzersiz olmasını sağlar

@UniqueElements(message = "Elements must be unique")

private List<String> uniqueTags;


// 50. @UUID: UUID'nin geçerli olmasını sağlar

@UUID(message = "Invalid UUID")

private String uuid;


// 51. @Country: Ülke kodunun geçerli olmasını sağlar

@Country(message = "Invalid country code")

private String countryCode;


// 52. @Currency: Para biriminin geçerli olmasını sağlar

@Currency(message = "Invalid currency code")

private String currencyCode;


// 53. @DomainName: Alan adının geçerli olmasını sağlar

@DomainName(message = "Invalid domain name")

private String domainName;


// 54. @IP: IP adresinin geçerli olmasını sağlar

@IP(message = "Invalid IP address")

private String ipAddress;


// 55. @Language: Dil kodunun geçerli olmasını sağlar

@Language(message = "Invalid language code")

private String languageCode;


// 56. @Locale: Yerel ayarın geçerli olmasını sağlar

@Locale(message = "Invalid locale")

private String locale;


// 57. @LuhnCheck: Luhn algoritmasına göre sayının geçerli olmasını sağlar

@LuhnCheck(message = "Invalid credit card number")

private String creditCardNumber;


// 58. @Mod10Check: Mod10 algoritmasına göre sayının geçerli olmasını sağlar

@Mod10Check(message = "Invalid number")

private String mod10Number;


// 59. @Mod11Check: Mod11 algoritmasına göre sayının geçerli olmasını sağlar

@Mod11Check(message = "Invalid number")

private String mod11Number;


// 60. @ISIN: Uluslararası Menkul Kıymet Tanımlama Numarasının (ISIN) geçerli olmasını sağlar

@ISIN(message = "Invalid ISIN")

private String isin;


// 61. @ParameterScriptAssert: Metod parametrelerinin doğrulanmasını sağlar

@ParameterScriptAssert(lang = "javascript", script = "arg0 != null && arg0.length() > 0", message = "Parameter must not be empty")

public void processString(String input) {}


// 62. @SafeHtml: HTML içeriğinin güvenli olmasını sağlar

@SafeHtml(whitelistType = SafeHtml.WhiteListType.BASIC, message = "HTML content is not safe")

private String userComment;


// 63. @ScriptAssert: Nesne düzeyinde özel doğrulama kuralları uygulamak için kullanılır

@ScriptAssert(lang = "javascript", script = "_this.password == _this.confirmPassword", message = "Passwords do not match")

public class PasswordReset {

private String password;

private String confirmPassword;

}


// 64. @UniqueElements: Koleksiyondaki öğelerin benzersiz olmasını sağlar

@UniqueElements(message = "Tags must be unique")

private Set<String> tags;


/// 65. @ValidPassword: Özel şifre doğrulama kuralları uygulamak için kullanılır

@ValidPassword(message = "Password must contain at least one uppercase letter, one lowercase letter, one number, and be at least 8 characters long")

private String password;


// 66. @PasswordMatches: Şifre ve şifre onayının eşleşmesini sağlar

@PasswordMatches(message = "Passwords do not match")

public class UserRegistration {

private String password;

private String confirmPassword;

}


// 67. @ValidEmail: Özel e-posta doğrulama kuralları uygulamak için kullanılır

@ValidEmail(message = "Invalid email format")

private String email;


// 68. @NullOrNotBlank: String'in null veya boş olmamasını sağlar

@NullOrNotBlank(message = "Middle name must be null or not blank")

private String middleName;


// 69. @NotEmptyList: List'in boş olmamasını sağlar

@NotEmptyList(message = "List cannot be empty")

private List<String> items;


// 70. @ValidName: Özel isim doğrulama kuralları uygulamak için kullanılır

@ValidName(message = "Invalid name format")

private String fullName;


// 71. @ValidPhoneNumber: Telefon numarasının geçerli olmasını sağlar

@ValidPhoneNumber(message = "Invalid phone number")

private String phoneNumber;


// 72. @ValidPostalCode: Posta kodunun geçerli olmasını sağlar

@ValidPostalCode(message = "Invalid postal code")

private String postalCode;


// 73. @ValidSSN: Sosyal güvenlik numarasının geçerli olmasını sağlar

@ValidSSN(message = "Invalid SSN")

private String ssn;


// 74. @ValidURL: URL'nin geçerli olmasını sağlar

@ValidURL(message = "Invalid URL")

private String websiteUrl;


// 75. @ValueOfEnum: Değerin belirli bir enum içinde olmasını sağlar

@ValueOfEnum(enumClass = UserRole.class, message = "Invalid user role")

private String userRole;


// 76. @NullOrMax: Değerin null veya belirli bir maksimum değerde olmasını sağlar

@NullOrMax(value = 100, message = "Value must be null or less than or equal to 100")

private Integer optionalMaxValue;


// 77. @NullOrMin: Değerin null veya belirli bir minimum değerde olmasını sağlar

@NullOrMin(value = 0, message = "Value must be null or greater than or equal to 0")

private Integer optionalMinValue;


// 78. @NullOrNotEmpty: Koleksiyonun null veya boş olmamasını sağlar

@NullOrNotEmpty(message = "List must be null or not empty")

private List<String> optionalList;


// 79. @NullOrPattern: String'in null veya belirli bir desene uymasını sağlar

@NullOrPattern(regexp = "^[A-Z]{2}\\d{4}$", message = "Code must be null or match the pattern")

private String optionalCode;


// 80. @NullOrSize: Koleksiyonun null veya belirli bir boyutta olmasını sağlar

@NullOrSize(min = 1, max = 10, message = "List must be null or have between 1 and 10 elements")

private List<String> optionalSizedList;


// 81. @PositiveOrZero: Sayının pozitif veya sıfır olmasını sağlar

@PositiveOrZero(message = "Value must be positive or zero")

private BigDecimal nonNegativeAmount;


// 82. @NegativeOrZero: Sayının negatif veya sıfır olmasını sağlar

@NegativeOrZero(message = "Value must be negative or zero")

private BigDecimal nonPositiveAmount;


// 83. @NotBlank: String'in boş olmamasını ve en az bir karakter içermesini sağlar

@NotBlank(message = "Name cannot be blank")

private String name;


// 84. @NotEmpty: Koleksiyonun boş olmamasını sağlar

@NotEmpty(message = "List cannot be empty")

private List<String> items;


// 85. @Positive: Sayının pozitif olmasını sağlar

@Positive(message = "Value must be positive")

private Integer positiveNumber;


// 86. @Negative: Sayının negatif olmasını sağlar

@Negative(message = "Value must be negative")

private Integer negativeNumber;


// 87. @Past: Tarihin geçmişte olmasını sağlar

@Past(message = "Date must be in the past")

private LocalDate pastDate;


// 88. @Future: Tarihin gelecekte olmasını sağlar

@Future(message = "Date must be in the future")

private LocalDate futureDate;


// 89. @PastOrPresent: Tarihin geçmişte veya şu anda olmasını sağlar

@PastOrPresent(message = "Date must be in the past or present")

private LocalDate pastOrPresentDate;


// 90. @FutureOrPresent: Tarihin gelecekte veya şu anda olmasını sağlar

@FutureOrPresent(message = "Date must be in the future or present")

private LocalDate futureOrPresentDate;


// 91. @Digits: Sayının belirli bir basamak sayısına sahip olmasını sağlar

@Digits(integer = 3, fraction = 2, message = "Number must have up to 3 integer digits and 2 fraction digits")

private BigDecimal amount;


// 92. @DecimalMin: Ondalık sayının minimum değerini kontrol eder

@DecimalMin(value = "0.01", inclusive = false, message = "Value must be greater than 0.01")

private BigDecimal minAmount;


// 93. @DecimalMax: Ondalık sayının maksimum değerini kontrol eder

@DecimalMax(value = "9999.99", inclusive = true, message = "Value must be less than or equal to 9999.99")

private BigDecimal maxAmount;


// 94. @Email: E-posta adresinin geçerli olmasını sağlar

@Email(message = "Invalid email address")

private String emailAddress;


// 95. @Pattern: String'in belirli bir regex desenine uymasını sağlar

@Pattern(regexp = "^[A-Z]{2}\\d{4}$", message = "Code must be in the format AA1234")

private String productCode;


// 96. @Size: Koleksiyonun veya String'in boyutunu kontrol eder

@Size(min = 2, max = 10, message = "List must have between 2 and 10 elements")

private List<String> tags;


// 97. @Length: String'in uzunluğunu kontrol eder

@Length(min = 5, max = 50, message = "Description must be between 5 and 50 characters")

private String description;


// 98. @Range: Sayının belirli bir aralıkta olmasını sağlar

@Range(min = 1, max = 5, message = "Rating must be between 1 and 5")

private Integer rating;


// 99. @AssertTrue: Boolean değerin true olmasını sağlar

@AssertTrue(message = "Terms must be accepted")

private boolean termsAccepted;


// 100. @AssertFalse: Boolean değerin false olmasını sağlar

@AssertFalse(message = "User must not be blocked")

private boolean isBlocked;

}




Javax Validation (JSR 380, Bean Validation 2.0) büyük ölçüde Java Reflection mekanizmasını kullanarak çalışır. Bu, validation işlemlerinin esnek ve güçlü olmasını sağlar. İşte bu konuyla ilgili bazı önemli noktalar:

  1. Anotasyon Tabanlı: Javax Validation, anotasyonları kullanarak çalışır. Bu anotasyonlar, Java Reflection API'si aracılığıyla çalışma zamanında okunur ve işlenir.

  2. Reflection Kullanımı:

    • Validator, doğrulama yapılacak sınıfın yapısını (fields, methods, etc.) reflection kullanarak analiz eder.

    • Anotasyonlar, reflection kullanılarak okunur ve yorumlanır.

    • Doğrulama kuralları, reflection kullanılarak uygulanır.

  3. Performans Etkileri:

    • Reflection kullanımı, doğrudan method çağrılarına göre biraz daha yavaş olabilir.

    • Ancak, modern JVM'ler ve framework'ler bu etkiyi minimize etmek için çeşitli optimizasyonlar yapar.

  4. Dinamik Doğrulama:

    • Reflection sayesinde, çalışma zamanında dinamik olarak doğrulama kuralları uygulanabilir.

    • Bu, uygulamanın daha esnek olmasını sağlar.

  5. Proxy Kullanımı:

    • Bazı durumlarda, özellikle method-level doğrulamalar için, proxy nesneler oluşturulur.

    • Bu proxy'ler de reflection kullanılarak oluşturulur ve yönetilir.

  6. Meta-data Erişimi:

    • Validation framework'ü, anotasyonlardaki meta-data'ya erişmek için reflection kullanır.

  7. Custom Validators:

    • Özel doğrulayıcılar oluştururken de genellikle reflection kullanılır.



import javax.validation.Validation;

import javax.validation.Validator;

import javax.validation.ValidatorFactory;

import javax.validation.constraints.NotNull;

import java.lang.reflect.Field;


public class ValidationReflectionExample {


public static class User {

@NotNull(message = "Name cannot be null")

private String name;


// getter ve setter methodları

}


public static void main(String[] args) throws Exception {

User user = new User();

// user.setName(null); // Bu satırı yorum satırından çıkarırsanız, doğrulama hatası alırsınız.


ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

Validator validator = factory.getValidator();


// Reflection kullanarak @NotNull anotasyonunu kontrol edelim

Field nameField = User.class.getDeclaredField("name");

NotNull notNullAnnotation = nameField.getAnnotation(NotNull.class);

if (notNullAnnotation != null) {

System.out.println("@NotNull anotasyonu bulundu. Mesaj: " + notNullAnnotation.message());

}


// Validation işlemini gerçekleştirelim

var violations = validator.validate(user);

if (!violations.isEmpty()) {

for (var violation : violations) {

System.out.println("Doğrulama hatası: " + violation.getMessage());

}

} else {

System.out.println("Doğrulama başarılı.");

}

}

}


Bu örnekte:

  1. User sınıfındaki name alanına @NotNull anotasyonu ekledik.

  2. Reflection kullanarak name alanını ve üzerindeki @NotNull anotasyonunu inceledik.

  3. Validator'ü kullanarak nesneyi doğruladık. Validator, arka planda reflection kullanarak anotasyonları okur ve kuralları uygular.

  4. Eğer user.setName(null); satırını yorum satırından çıkarırsanız, doğrulama hatası alırsınız.

Bu örnek, Javax Validation'ın reflection kullanımını basit bir şekilde göstermektedir. Gerçek uygulamalarda, bu işlemler framework tarafından otomatik olarak gerçekleştirilir ve geliştiricinin doğrudan reflection ile uğraşması gerekmez.


Please Select Embedded Mode To Show The Comment System.*

Daha yeni Daha eski

نموذج الاتصال