Unverified Commit 64452901 authored by devteria.com's avatar devteria.com Committed by GitHub

Merge pull request #2 from devteria/course/advance-handing-exception

add AppException
parents c92a7378 11fb58bf
package com.devteria.identityservice.controller; package com.devteria.identityservice.controller;
import com.devteria.identityservice.dto.request.ApiResponse;
import com.devteria.identityservice.dto.request.UserCreationRequest; import com.devteria.identityservice.dto.request.UserCreationRequest;
import com.devteria.identityservice.dto.request.UserUpdateRequest; import com.devteria.identityservice.dto.request.UserUpdateRequest;
import com.devteria.identityservice.entity.User; import com.devteria.identityservice.entity.User;
...@@ -17,8 +18,12 @@ public class UserController { ...@@ -17,8 +18,12 @@ public class UserController {
private UserService userService; private UserService userService;
@PostMapping @PostMapping
User createUser(@RequestBody @Valid UserCreationRequest request){ ApiResponse<User> createUser(@RequestBody @Valid UserCreationRequest request){
return userService.createUser(request); ApiResponse<User> apiResponse = new ApiResponse<>();
apiResponse.setResult(userService.createUser(request));
return apiResponse;
} }
@GetMapping @GetMapping
......
package com.devteria.identityservice.dto.request;
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ApiResponse <T> {
private int code = 1000;
private String message;
private T result;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
}
...@@ -5,10 +5,10 @@ import jakarta.validation.constraints.Size; ...@@ -5,10 +5,10 @@ import jakarta.validation.constraints.Size;
import java.time.LocalDate; import java.time.LocalDate;
public class UserCreationRequest { public class UserCreationRequest {
@Size(min = 3,message = "Username must be at least 3 characters") @Size(min = 3,message = "USERNAME_INVALID")
private String username; private String username;
@Size(min = 8, message = "Password must be at least 8 characters") @Size(min = 8, message = "INVALID_PASSWORD")
private String password; private String password;
private String firstName; private String firstName;
private String lastName; private String lastName;
......
package com.devteria.identityservice.exception;
public class AppException extends RuntimeException{
public AppException(ErrorCode errorCode) {
super(errorCode.getMessage());
this.errorCode = errorCode;
}
private ErrorCode errorCode;
public ErrorCode getErrorCode() {
return errorCode;
}
public void setErrorCode(ErrorCode errorCode) {
this.errorCode = errorCode;
}
}
package com.devteria.identityservice.exception;
public enum ErrorCode {
UNCATEGORIZED_EXCEPTION(9999, "Uncategorized error"),
INVALID_KEY(1001, "Uncategorized error"),
USER_EXISTED(1002, "User existed"),
USERNAME_INVALID(1003, "Username must be at least 3 characters"),
INVALID_PASSWORD(1004, "Password must be at least 8 characters")
;
ErrorCode(int code, String message) {
this.code = code;
this.message = message;
}
private int code;
private String message;
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}
package com.devteria.identityservice.exception; package com.devteria.identityservice.exception;
import com.devteria.identityservice.dto.request.ApiResponse;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
...@@ -8,13 +9,44 @@ import org.springframework.web.bind.annotation.ExceptionHandler; ...@@ -8,13 +9,44 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice @ControllerAdvice
public class GlobalExceptionHandler { public class GlobalExceptionHandler {
@ExceptionHandler(value = RuntimeException.class) @ExceptionHandler(value = Exception.class)
ResponseEntity<String> handlingRuntimeException(RuntimeException exception){ ResponseEntity<ApiResponse> handlingRuntimeException(RuntimeException exception){
return ResponseEntity.badRequest().body(exception.getMessage()); ApiResponse apiResponse = new ApiResponse();
apiResponse.setCode(ErrorCode.UNCATEGORIZED_EXCEPTION.getCode());
apiResponse.setMessage(ErrorCode.UNCATEGORIZED_EXCEPTION.getMessage());
return ResponseEntity.badRequest().body(apiResponse);
}
@ExceptionHandler(value = AppException.class)
ResponseEntity<ApiResponse> handlingAppException(AppException exception){
ErrorCode errorCode = exception.getErrorCode();
ApiResponse apiResponse = new ApiResponse();
apiResponse.setCode(errorCode.getCode());
apiResponse.setMessage(errorCode.getMessage());
return ResponseEntity.badRequest().body(apiResponse);
} }
@ExceptionHandler(value = MethodArgumentNotValidException.class) @ExceptionHandler(value = MethodArgumentNotValidException.class)
ResponseEntity<String> handlingValidation(MethodArgumentNotValidException exception){ ResponseEntity<ApiResponse> handlingValidation(MethodArgumentNotValidException exception){
return ResponseEntity.badRequest().body(exception.getFieldError().getDefaultMessage()); String enumKey = exception.getFieldError().getDefaultMessage();
ErrorCode errorCode = ErrorCode.INVALID_KEY;
try {
errorCode = ErrorCode.valueOf(enumKey);
} catch (IllegalArgumentException e){
}
ApiResponse apiResponse = new ApiResponse();
apiResponse.setCode(errorCode.getCode());
apiResponse.setMessage(errorCode.getMessage());
return ResponseEntity.badRequest().body(apiResponse);
} }
} }
...@@ -3,6 +3,8 @@ package com.devteria.identityservice.service; ...@@ -3,6 +3,8 @@ package com.devteria.identityservice.service;
import com.devteria.identityservice.dto.request.UserCreationRequest; import com.devteria.identityservice.dto.request.UserCreationRequest;
import com.devteria.identityservice.dto.request.UserUpdateRequest; import com.devteria.identityservice.dto.request.UserUpdateRequest;
import com.devteria.identityservice.entity.User; import com.devteria.identityservice.entity.User;
import com.devteria.identityservice.exception.AppException;
import com.devteria.identityservice.exception.ErrorCode;
import com.devteria.identityservice.repository.UserRepository; import com.devteria.identityservice.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -18,7 +20,7 @@ public class UserService { ...@@ -18,7 +20,7 @@ public class UserService {
User user = new User(); User user = new User();
if (userRepository.existsByUsername(request.getUsername())) if (userRepository.existsByUsername(request.getUsername()))
throw new RuntimeException("User existed."); throw new AppException(ErrorCode.USER_EXISTED);
user.setUsername(request.getUsername()); user.setUsername(request.getUsername());
user.setPassword(request.getPassword()); user.setPassword(request.getPassword());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment