import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
public class HeaderValidator {
private static final Logger logger = Logger.getLogger(HeaderValidator.class.getName());
public static boolean validateHeaders(Map<String, String> headers, Map<String, ValidationRule> validationRules) {
if (headers == null || validationRules == null) {
logger.severe("Headers or validation rules are null.");
return false;
}
for (Map.Entry<String, ValidationRule> rule : validationRules.entrySet()) {
String headerName = rule.getKey();
ValidationRule ruleValue = rule.getValue();
if (headers.containsKey(headerName)) {
String headerValue = headers.get(headerName);
if (!ruleValue.validate(headerValue)) {
logger.warning("Header '" + headerName + "' failed validation: " + headerValue + ". Rule: " + ruleValue.getRule());
return false; // Validation failed, stop processing
}
} else {
logger.warning("Missing header: " + headerName);
return false; // Required header missing
}
}
return true; // All headers validated successfully
}
public interface ValidationRule {
boolean validate(String value);
String getRule();
}
public static class StringLengthRule implements ValidationRule {
private final int minLength;
private final int maxLength;
public StringLengthRule(int minLength, int maxLength) {
this.minLength = minLength;
this.maxLength = maxLength;
}
@Override
public boolean validate(String value) {
if (value == null) {
return false;
}
return value.length() >= minLength && value.length() <= maxLength;
}
@Override
public String getRule() {
return "String length between " + minLength + " and " + maxLength;
}
}
public static class StringContainsRule implements ValidationRule {
private final String substring;
public StringContainsRule(String substring) {
this.substring = substring;
}
@Override
public boolean validate(String value) {
if (value == null) {
return false;
}
return value.contains(substring);
}
@Override
public String getRule() {
return "Contains substring: " + substring;
}
}
public static void main(String[] args) {
// Example Usage
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "application/json");
headers.put("X-Custom-Header", "someValue");
Map<String, ValidationRule> validationRules = new HashMap<>();
validationRules.put("Content-Type", new StringLengthRule(5, 20));
validationRules.put("X-Custom-Header", new StringContainsRule("Custom"));
boolean isValid = validateHeaders(headers, validationRules);
if (isValid) {
System.out.println("Headers are valid.");
} else {
System.out.println("Headers are invalid.");
}
}
}
Add your comment