diff --git a/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/AppConfig.java b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/AppConfig.java new file mode 100644 index 000000000000..dcff5a2b79e7 --- /dev/null +++ b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/AppConfig.java @@ -0,0 +1,19 @@ +package com.baeldung.validation.custommessage; + +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; + +@Configuration +public class AppConfig { + + @Bean + public MessageSource messageSource() { + ResourceBundleMessageSource source = new ResourceBundleMessageSource(); + source.setBasename("ValidationMessages"); + source.setDefaultEncoding("UTF-8"); + source.setUseCodeAsDefaultMessage(true); + return source; + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/LogbackPing.java b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/LogbackPing.java new file mode 100644 index 000000000000..3b8f381f308b --- /dev/null +++ b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/LogbackPing.java @@ -0,0 +1,11 @@ +package com.baeldung.validation.custommessage; +import ch.qos.logback.core.util.StatusPrinter; +import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.LoggerContext; + +public class LogbackPing { + public static void ping() { + LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); + StatusPrinter.print(context); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/SpringBootCustomValidationApplication.java b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/SpringBootCustomValidationApplication.java new file mode 100644 index 000000000000..9bdf10d07f93 --- /dev/null +++ b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/SpringBootCustomValidationApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.validation.custommessage; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootCustomValidationApplication { + public static void main(String[] args) { + LogbackPing.ping(); // Ensures logback-core is included + SpringApplication.run(SpringBootCustomValidationApplication.class, args); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/UserController.java b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/UserController.java new file mode 100644 index 000000000000..bf31af69bd34 --- /dev/null +++ b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/UserController.java @@ -0,0 +1,29 @@ +// Minor change to trigger PR comparison +package com.baeldung.validation.custommessage; + +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.annotation.*; + +import jakarta.validation.Valid; +import java.util.List; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/register") +public class UserController { + + @PostMapping + public ResponseEntity registerUser(@RequestBody @Valid UserDTO userDTO, BindingResult result) { + if (result.hasErrors()) { + List errors = result.getFieldErrors() + .stream() + .map(FieldError::getDefaultMessage) + .collect(Collectors.toList()); + return ResponseEntity.badRequest().body(errors); + } + + return ResponseEntity.ok("User registered successfully"); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/UserDTO.java b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/UserDTO.java new file mode 100644 index 000000000000..9e6dff84ea34 --- /dev/null +++ b/spring-boot-modules/spring-boot-custom-validation/src/main/java/com/baeldung/validation/custommessage/UserDTO.java @@ -0,0 +1,42 @@ +package com.baeldung.validation.custommessage; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; + +public class UserDTO { + + @NotBlank(message = "{user.name.notblank}") + private String name; + + @Email(message = "{user.email.invalid}") + private String email; + + @Min(value = 18, message = "{user.age.min}") + private int age; + + // Getters and setters + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } +} \ No newline at end of file