SpringBoot controller advice

@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class TestExceptionHandler {

Logger logger = LogManager.getLogger(TestExceptionHandler.class);

@Value(value = "${errorexceptionhandling.validation.name}")
String validationComponentName;

@Autowired
ErrorExceptionMessageHandler errorHandler;

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<BaseServiceResponse<ErrorResponse>> validationErrorHandler(
MethodArgumentNotValidException ex) {

List<FieldError> list = ex.getBindingResult().getFieldErrors();
List<ErrorResponse> errorList = new ArrayList<>();
for (FieldError fe : list) {
Map<String, String> params = new HashMap<>();
params.put(ExceptionHandlerConstants.FIELD, fe.getField());
Object temp = fe.getRejectedValue();
if (temp instanceof String) {
params.put(ExceptionHandlerConstants.VALIDATED_VALUE, (String) temp);
}
if (fe.contains(ConstraintViolation.class)) {
ConstraintViolation<?> cv = fe.unwrap(ConstraintViolation.class);
ConstraintDescriptor<?> cd = cv.getConstraintDescriptor();
Map<String, Object> attributes = cd.getAttributes();
addParameters(attributes, params);
}
String errorCode = fe.getDefaultMessage();
ErrorCodeDetail errorCodeDetail = errorHandler.getErrorInfo(validationComponentName, errorCode);
String newMessage = StringSubstitutor.replace(errorCodeDetail.getMessage(), params,
ExceptionHandlerConstants.PARAM_PREFIX, ExceptionHandlerConstants.PARAM_SUFFIX);
ErrorResponse error = new ErrorResponse();
error.setErrorCodeStr(errorCodeDetail.getCode());
error.setErrorCode(HttpStatus.BAD_REQUEST.value());
error.setMessage(newMessage);
error.setMessageDetails(errorCodeDetail.getMessageDetail());
error.setCategory(ErrorCategoryEnum.ERROR);
errorList.add(error);
logger.debug(newMessage);
}
BaseServiceResponse<ErrorResponse> response = new BaseServiceResponse<ErrorResponse>();
response.setHasErrors(HasErrors.TRUE);
response.setErrorsList(errorList);
return new ResponseEntity<BaseServiceResponse<ErrorResponse>>(response, HttpStatus.BAD_REQUEST);
}

@ExceptionHandler(APIException.class)
public ResponseEntity<BaseServiceResponse<ErrorResponse>> apiExceptionHandler(APIException ex) {

ErrorCodeDetail errorCodeDetail = errorHandler.getErrorInfo(ex.getComponentName(), ex.getErrorCode(),
ex.getErrorMessage());
Map<String, String> map = new HashMap<>();
map.put(ExceptionHandlerConstants.APPLICATION_NAME, errorHandler.getMicroServiceName());
map.putAll(ex.getExceptionKeyMap());
String newMessage = StringSubstitutor.replace(errorCodeDetail.getMessage(), map,
ExceptionHandlerConstants.PARAM_PREFIX, ExceptionHandlerConstants.PARAM_SUFFIX);
ErrorResponse error = new ErrorResponse();
error.setErrorCode(HttpStatus.BAD_REQUEST.value());
error.setMessage(newMessage);
error.setMessageDetails(errorCodeDetail.getMessageDetail());
error.setCategory(ErrorCategoryEnum.ERROR);
logger.debug(newMessage);

BaseServiceResponse<ErrorResponse> response = formBaseResponse(error);

return new ResponseEntity<BaseServiceResponse<ErrorResponse>>(response, HttpStatus.BAD_REQUEST);

}
}

Comments

Popular posts from this blog

how to generate classes from swagger

How to create new user/account in BCC