add jakarta bean validation
This commit is contained in:
parent
280400ceea
commit
20e7421603
16 changed files with 88 additions and 19 deletions
|
|
@ -3,10 +3,10 @@ package main.java.models.exceptions;
|
|||
import java.time.LocalDateTime;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.Builder;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
@Getter
|
||||
@Builder
|
||||
@SuperBuilder
|
||||
public class StandardError {
|
||||
private LocalDateTime timestamp;
|
||||
private Integer status;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
package main.java.models.exceptions;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import lombok.Getter;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@SuperBuilder
|
||||
public class ValidationException extends StandardError {
|
||||
|
||||
@Getter
|
||||
private List<FieldError> errors;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
private static class FieldError {
|
||||
private String fieldName;
|
||||
private String message;
|
||||
}
|
||||
|
||||
public void addError(final String fieldName, final String message) {
|
||||
this.errors.add(new FieldError(fieldName, message));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,22 @@
|
|||
package main.java.models.requests;
|
||||
|
||||
import java.util.Set;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import main.java.models.enums.ProfileEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
import lombok.With;
|
||||
|
||||
@With
|
||||
public record CreateUserRequest(
|
||||
String name,
|
||||
String email,
|
||||
String password,
|
||||
Set<ProfileEnum> profiles) {
|
||||
@Schema(description = "Name of the user", example = "John Doe", required = true) @NotEmpty(message = "Name cannot be empty") @Size(min = 3, max = 50, message = "Name must contain between 3 and 50 characters") String name,
|
||||
|
||||
@Schema(description = "Email of the user", example = "rayanvix@gmail.com") @Email(message = "Invalid email format") @NotBlank(message = "Email cannot be blank") @Size(min = 6, max = 50, message = "Email must contain between 6 and 50 characters") String email,
|
||||
|
||||
@Schema(description = "Password of the user", example = "P@ssw0rd!", required = true) @NotEmpty(message = "Password cannot be empty") @Size(min = 6, max = 20, message = "Password must contain between 6 and 20 characters") @NotBlank(message = "Password cannot be blank") String password,
|
||||
|
||||
@Schema(description = "Profiles assigned to the user", example = "[\" ROLE_ADMIN \", \"ROLE_CUSTOMER \" ]", required = true) Set<ProfileEnum> profiles) {
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,6 +1,11 @@
|
|||
main/java/models/exceptions/ResourceNotFoundException.class
|
||||
main/java/models/exceptions/ValidationException$ValidationExceptionBuilderImpl.class
|
||||
main/java/models/exceptions/ValidationException$FieldError.class
|
||||
main/java/models/exceptions/ValidationException.class
|
||||
main/java/models/exceptions/StandardError$StandardErrorBuilder.class
|
||||
main/java/models/exceptions/StandardError$StandardErrorBuilderImpl.class
|
||||
main/java/models/responses/UserResponse.class
|
||||
main/java/models/enums/ProfileEnum.class
|
||||
main/java/models/exceptions/StandardError.class
|
||||
main/java/models/exceptions/ValidationException$ValidationExceptionBuilder.class
|
||||
main/java/models/requests/CreateUserRequest.class
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/enums/ProfileEnum.java
|
||||
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/exceptions/ResourceNotFoundException.java
|
||||
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/exceptions/StandardError.java
|
||||
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/exceptions/ValidationException.java
|
||||
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/requests/CreateUserRequest.java
|
||||
/home/dev/projetos/Help Desk 2.0/hd-commons-lib/src/main/java/models/responses/UserResponse.java
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import main.java.models.exceptions.StandardError;
|
||||
import main.java.models.requests.CreateUserRequest;
|
||||
import main.java.models.responses.UserResponse;
|
||||
|
|
@ -41,5 +41,5 @@ public interface UserController {
|
|||
@ApiResponse(responseCode = "500", description = "Internal server error", content = @Content(mediaType = "application/json", schema = @Schema(implementation = StandardError.class)))
|
||||
})
|
||||
@PostMapping
|
||||
ResponseEntity<Void> save(@RequestBody final CreateUserRequest createUserRequest);
|
||||
ResponseEntity<Void> save(@Valid @RequestBody final CreateUserRequest createUserRequest);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +1,57 @@
|
|||
package br.com.rayankonecny.userserviceapi.controller.exceptions;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.FieldError;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
import main.java.models.exceptions.ValidationException;
|
||||
import main.java.models.exceptions.ResourceNotFoundException;
|
||||
import main.java.models.exceptions.StandardError;
|
||||
|
||||
import static java.time.LocalDateTime.now;
|
||||
import static org.springframework.http.HttpStatus.NOT_FOUND;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@ControllerAdvice
|
||||
public class ControllerExceptionHandler {
|
||||
|
||||
@ExceptionHandler(ResourceNotFoundException.class)
|
||||
ResponseEntity<StandardError> handleNotFoundException(final ResourceNotFoundException ex, final HttpServletRequest request) {
|
||||
ResponseEntity<StandardError> handleNotFoundException(final ResourceNotFoundException ex,
|
||||
final HttpServletRequest request) {
|
||||
return ResponseEntity.status(NOT_FOUND).body(
|
||||
|
||||
StandardError.builder()
|
||||
.timestamp(now())
|
||||
.status(NOT_FOUND.value())
|
||||
.error("Resource Not Found")
|
||||
.error(NOT_FOUND.getReasonPhrase())
|
||||
.message(ex.getMessage())
|
||||
.path(request.getRequestURI())
|
||||
.build());
|
||||
}
|
||||
|
||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||
ResponseEntity<StandardError> handleMethodArgumentNotValidException(
|
||||
final MethodArgumentNotValidException ex,
|
||||
final HttpServletRequest request) {
|
||||
var error = ValidationException
|
||||
.builder()
|
||||
.timestamp(now())
|
||||
.status(NOT_FOUND.value())
|
||||
.error("Validation Exception")
|
||||
.message("Exception in validation attributes")
|
||||
.path(request.getRequestURI())
|
||||
.errors(new ArrayList<>())
|
||||
.build();
|
||||
|
||||
for (FieldError fieldError : ex.getBindingResult().getFieldErrors()) {
|
||||
error.addError(fieldError.getField(), fieldError.getDefaultMessage());
|
||||
}
|
||||
|
||||
return ResponseEntity.badRequest().body(error);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue