1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.logging.Logger;
  4. public class HeaderValidator {
  5. private static final Logger logger = Logger.getLogger(HeaderValidator.class.getName());
  6. public static boolean validateHeaders(Map<String, String> headers, Map<String, ValidationRule> validationRules) {
  7. if (headers == null || validationRules == null) {
  8. logger.severe("Headers or validation rules are null.");
  9. return false;
  10. }
  11. for (Map.Entry<String, ValidationRule> rule : validationRules.entrySet()) {
  12. String headerName = rule.getKey();
  13. ValidationRule ruleValue = rule.getValue();
  14. if (headers.containsKey(headerName)) {
  15. String headerValue = headers.get(headerName);
  16. if (!ruleValue.validate(headerValue)) {
  17. logger.warning("Header '" + headerName + "' failed validation: " + headerValue + ". Rule: " + ruleValue.getRule());
  18. return false; // Validation failed, stop processing
  19. }
  20. } else {
  21. logger.warning("Missing header: " + headerName);
  22. return false; // Required header missing
  23. }
  24. }
  25. return true; // All headers validated successfully
  26. }
  27. public interface ValidationRule {
  28. boolean validate(String value);
  29. String getRule();
  30. }
  31. public static class StringLengthRule implements ValidationRule {
  32. private final int minLength;
  33. private final int maxLength;
  34. public StringLengthRule(int minLength, int maxLength) {
  35. this.minLength = minLength;
  36. this.maxLength = maxLength;
  37. }
  38. @Override
  39. public boolean validate(String value) {
  40. if (value == null) {
  41. return false;
  42. }
  43. return value.length() >= minLength && value.length() <= maxLength;
  44. }
  45. @Override
  46. public String getRule() {
  47. return "String length between " + minLength + " and " + maxLength;
  48. }
  49. }
  50. public static class StringContainsRule implements ValidationRule {
  51. private final String substring;
  52. public StringContainsRule(String substring) {
  53. this.substring = substring;
  54. }
  55. @Override
  56. public boolean validate(String value) {
  57. if (value == null) {
  58. return false;
  59. }
  60. return value.contains(substring);
  61. }
  62. @Override
  63. public String getRule() {
  64. return "Contains substring: " + substring;
  65. }
  66. }
  67. public static void main(String[] args) {
  68. // Example Usage
  69. Map<String, String> headers = new HashMap<>();
  70. headers.put("Content-Type", "application/json");
  71. headers.put("X-Custom-Header", "someValue");
  72. Map<String, ValidationRule> validationRules = new HashMap<>();
  73. validationRules.put("Content-Type", new StringLengthRule(5, 20));
  74. validationRules.put("X-Custom-Header", new StringContainsRule("Custom"));
  75. boolean isValid = validateHeaders(headers, validationRules);
  76. if (isValid) {
  77. System.out.println("Headers are valid.");
  78. } else {
  79. System.out.println("Headers are invalid.");
  80. }
  81. }
  82. }

Add your comment