22
33import io .kafbat .ui .model .MetricsConfig ;
44import jakarta .annotation .PostConstruct ;
5+ import jakarta .validation .Valid ;
6+ import jakarta .validation .constraints .NotBlank ;
57import jakarta .validation .constraints .NotEmpty ;
68import jakarta .validation .constraints .NotNull ;
79import java .util .ArrayList ;
1921import org .springframework .boot .context .properties .ConfigurationProperties ;
2022import org .springframework .context .annotation .Configuration ;
2123import org .springframework .util .StringUtils ;
24+ import org .springframework .validation .annotation .Validated ;
2225
2326@ Configuration
2427@ ConfigurationProperties ("kafka" )
2528@ Data
29+ @ Validated
2630public class ClustersProperties {
2731
28- List <Cluster > clusters = new ArrayList <>();
32+ List <@ Valid Cluster > clusters = new ArrayList <>();
2933
3034 String internalTopicPrefix ;
3135
@@ -35,9 +39,9 @@ public class ClustersProperties {
3539
3640 @ Data
3741 public static class Cluster {
38- @ NotEmpty
42+ @ NotBlank ( message = "field name for for cluster could not be blank" )
3943 String name ;
40- @ NotEmpty
44+ @ NotBlank ( message = "field bootstrapServers for for cluster could not be blank" )
4145 String bootstrapServers ;
4246
4347 TruststoreConfig ssl ;
@@ -50,9 +54,9 @@ public static class Cluster {
5054 KsqldbServerAuth ksqldbServerAuth ;
5155 KeystoreConfig ksqldbServerSsl ;
5256
53- List <ConnectCluster > kafkaConnect ;
57+ List <@ Valid ConnectCluster > kafkaConnect ;
5458
55- List <SerdeConfig > serde ;
59+ List <@ Valid SerdeConfig > serde ;
5660 String defaultKeySerde ;
5761 String defaultValueSerde ;
5862
@@ -62,9 +66,9 @@ public static class Cluster {
6266
6367 Long pollingThrottleRate ;
6468
65- List <Masking > masking ;
69+ List <@ Valid Masking > masking ;
6670
67- AuditProperties audit ;
71+ @ Valid AuditProperties audit ;
6872 }
6973
7074 @ Data
@@ -92,7 +96,9 @@ public static class MetricsConfigData {
9296 @ Builder (toBuilder = true )
9397 @ ToString (exclude = {"password" , "keystorePassword" })
9498 public static class ConnectCluster {
99+ @ NotBlank
95100 String name ;
101+ @ NotBlank
96102 String address ;
97103 String username ;
98104 String password ;
@@ -126,8 +132,11 @@ public static class KeystoreConfig {
126132
127133 @ Data
128134 public static class SerdeConfig {
135+ @ NotBlank
129136 String name ;
137+ @ NotBlank
130138 String className ;
139+ @ NotBlank
131140 String filePath ;
132141 Map <String , Object > properties ;
133142 String topicKeysPattern ;
@@ -143,6 +152,7 @@ public static class KsqldbServerAuth {
143152
144153 @ Data
145154 public static class Masking {
155+ @ NotNull
146156 Type type ;
147157 List <String > fields ;
148158 String fieldsNamePattern ;
@@ -160,10 +170,12 @@ public enum Type {
160170 @ NoArgsConstructor
161171 @ AllArgsConstructor
162172 public static class AuditProperties {
173+ @ NotBlank
163174 String topic ;
164175 Integer auditTopicsPartitions ;
165176 Boolean topicAuditEnabled ;
166177 Boolean consoleAuditEnabled ;
178+ @ NotNull
167179 LogLevel level ;
168180 Map <String , String > auditTopicProperties ;
169181
0 commit comments