Skip to content

Commit f0e767e

Browse files
committed
message-bundle feature:
changes: - use Locale Config to define bean for use message-source - define message and messageContainer for use to send identical messageResponse for error or normal message - some improve code
1 parent 5de4fb1 commit f0e767e

File tree

6 files changed

+65
-70
lines changed

6 files changed

+65
-70
lines changed

src/main/java/ir/bigz/springbootreal/commons/generallog/AppLogAspect.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void logAfterThrowException(JoinPoint joinPoint, AppException exception){
5454
methodName, exception.getSampleExceptionType().getErrorCode(), exception.getDetail());
5555
}
5656

57-
@AfterReturning(value = "execution(* ir.bigz.springbootreal.exception.validation.ErrorController.*(..))", returning = "object")
57+
@AfterReturning(value = "@annotation(ir.bigz.springbootreal.validation.annotation.ValidationLogResponseHandled)", returning = "object")
5858
public void logAfterThrowValidationException(JoinPoint joinPoint, Object object){
5959
HttpExceptionModel httpExceptionModel = (HttpExceptionModel) ((ResponseEntity) object).getBody();
6060
LOG.info("validation exception path: {} | errorCode: {} | errors: {}",

src/main/java/ir/bigz/springbootreal/controller/AbstractController.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@
1313
import org.springframework.web.context.request.ServletRequestAttributes;
1414

1515
import javax.servlet.http.HttpServletRequest;
16-
import java.util.HashMap;
17-
import java.util.Locale;
18-
import java.util.Map;
19-
import java.util.Objects;
16+
import java.util.*;
2017
import java.util.stream.Collectors;
2118

2219
public abstract class AbstractController {
@@ -66,6 +63,7 @@ protected ResponseEntity<?> getErrorMessage(MessageSource messageSource, Excepti
6663

6764
private HttpExceptionModel getErrorModelResponse(ExceptionType exceptionType, MessageSource messageSource, Locale locale, Object... messageParams) {
6865
return HttpExceptionModel.builder()
66+
.uuid(UUID.randomUUID().toString())
6967
.errorCode(exceptionType.getErrorCode())
7068
.message(messageSource.getMessage(exceptionType.getReasonMessage(), messageParams, Objects.nonNull(locale) ? locale : Locale.getDefault()))
7169
.timestamp(Utils.getTimestampNow().toString())

src/main/java/ir/bigz/springbootreal/exception/HttpExceptionHandler.java

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,65 @@
11
package ir.bigz.springbootreal.exception;
22

3+
import ir.bigz.springbootreal.validation.annotation.ValidationLogResponseHandled;
4+
import ir.bigz.springbootreal.exception.validation.ValidationErrorResponseModel;
5+
import org.springframework.http.HttpHeaders;
6+
import org.springframework.http.HttpStatus;
37
import org.springframework.http.ResponseEntity;
4-
import org.springframework.web.bind.annotation.ControllerAdvice;
8+
import org.springframework.validation.FieldError;
9+
import org.springframework.web.bind.MethodArgumentNotValidException;
510
import org.springframework.web.bind.annotation.ExceptionHandler;
11+
import org.springframework.web.bind.annotation.RestControllerAdvice;
12+
import org.springframework.web.context.request.WebRequest;
13+
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
614

715
import java.time.ZoneId;
816
import java.time.ZonedDateTime;
917
import java.time.format.DateTimeFormatter;
18+
import java.util.HashMap;
19+
import java.util.Map;
1020
import java.util.UUID;
1121

12-
@ControllerAdvice
13-
public class HttpExceptionHandler {
22+
@RestControllerAdvice
23+
public class HttpExceptionHandler extends ResponseEntityExceptionHandler {
1424

1525
@ExceptionHandler(value = {AppException.class})
16-
public ResponseEntity<Object> handleApiRequestException(AppException e){
26+
public ResponseEntity<HttpExceptionModel> handleApiRequestException(AppException e) {
1727

18-
UUID uuid = UUID.randomUUID();
19-
HttpExceptionModel apiException = new HttpExceptionModel(
20-
uuid.toString(),
21-
e.getSampleExceptionType().getErrorCode(),
22-
e.getDetail(),
23-
timeLog(),
24-
null);
28+
return ResponseEntity.status(e.getSampleExceptionType().getHttpStatus())
29+
.body(HttpExceptionModel.builder()
30+
.uuid(UUID.randomUUID().toString())
31+
.errorCode(e.getSampleExceptionType().getErrorCode())
32+
.message(e.getDetail())
33+
.timestamp(timeLog()).build());
34+
}
35+
36+
@Override
37+
@ValidationLogResponseHandled
38+
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
39+
HttpHeaders headers,
40+
HttpStatus status,
41+
WebRequest request) {
42+
43+
Map<String, String> errors = new HashMap<>();
44+
ex.getBindingResult().getAllErrors().forEach((error) -> {
45+
String fieldName = ((FieldError) error).getField();
46+
String errorMessage = error.getDefaultMessage();
47+
errors.put(fieldName, errorMessage);
48+
});
2549

26-
return new ResponseEntity<>(apiException, e.getSampleExceptionType().getHttpStatus());
50+
return ResponseEntity.status(SampleExceptionType.VALIDATION_ERROR.getHttpStatus())
51+
.body(HttpExceptionModel.builder()
52+
.uuid(UUID.randomUUID().toString())
53+
.errorCode(SampleExceptionType.VALIDATION_ERROR.getErrorCode())
54+
.message(SampleExceptionType.VALIDATION_ERROR.getReasonMessage())
55+
.timestamp(timeLog())
56+
.validationError(ValidationErrorResponseModel.builder()
57+
.errors(errors)
58+
.path(request.getDescription(false))
59+
.build()).build());
2760
}
2861

29-
private String timeLog(){
62+
private String timeLog() {
3063
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd - HH:mm:ss z");
3164
return ZonedDateTime.now(ZoneId.of("Asia/Tehran")).format(formatter);
3265
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
package ir.bigz.springbootreal.exception;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
34
import ir.bigz.springbootreal.exception.validation.ValidationErrorResponseModel;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
67
import lombok.Getter;
8+
import lombok.ToString;
79

810
@Getter
911
@AllArgsConstructor
1012
@Builder
13+
@ToString
1114
public class HttpExceptionModel {
1215

1316
private String uuid;
1417
private final int errorCode;
1518
private final String message;
1619
private final String timestamp;
20+
@JsonIgnore
1721
private final ValidationErrorResponseModel validationError;
1822
}

src/main/java/ir/bigz/springbootreal/exception/validation/ErrorController.java

Lines changed: 0 additions & 52 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package ir.bigz.springbootreal.validation.annotation;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Target(ElementType.METHOD)
9+
@Retention(RetentionPolicy.RUNTIME)
10+
public @interface ValidationLogResponseHandled {
11+
12+
}

0 commit comments

Comments
 (0)