Bepoz
파즈의 공부 일기
Bepoz
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • 공부 기록들 (85)
      • 우테코 (17)
    • Spring (85)
    • Java (43)
    • Infra (17)
    • 책 정리 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Bepoz

파즈의 공부 일기

Spring

[Spring] Errors Serializer 만들기

2020. 9. 18. 21:16

Errors는 자바 빈 스펙을 따르지 않기 때문에 Serialize 할 수 없다. 하지만 Errors를 꼭 body에 넣어서 그 값을 json으로 보고싶을 경우에 serializer를 따로 생성해줄 수가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@JsonComponent
public class ErrorsSerializer extends JsonSerializer<Errors> {
    @Override
    public void serialize(Errors errors, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartArray();
        errors.getFieldErrors().forEach(e->{
            try{
                gen.writeStartObject();
                gen.writeStringField("field", e.getField());
                gen.writeStringField("objectName", e.getObjectName());
                gen.writeStringField("code", e.getCode());
                gen.writeStringField("defaultMessage", e.getDefaultMessage());
                Object rejectedValue = e.getRejectedValue();
                if (rejectedValue != null) {
                    gen.writeStringField("rejectedValue",rejectedValue.toString());
                }
                gen.writeEndObject();
            }catch(IOException e1){
                e1.printStackTrace();
            }
        });
 
        errors.getGlobalErrors().forEach(e->{
            try{
                gen.writeStartObject();
                gen.writeStringField("objectName", e.getObjectName());
                gen.writeStringField("code", e.getCode());
                gen.writeStringField("defaultMessage", e.getDefaultMessage());
                gen.writeEndObject();
            }catch(IOException e1){
                e1.printStackTrace();
            }
        });
        gen.writeEndArray();
    }
}
Colored by Color Scripter
cs

JsonSerializer를 상속받아 사용한다.

@JsonComponent 를 사용해줌으로써 objectmapper에 등록하게 되어 사용할 수 있게된다.

 

serialize 를 오버라이드하는데 gen.writeStartArray()와 gen.writeEndArray()로 시작과 끝을 맺어야 된다.

내부 배열을 시작과 끝을 의미한다고 받아들이면 된다.

 

errors 에 들어가있는 것들을 forEach로 돌리면서 필드값과 그 value를 적어주었다.

이 때에는 gen.writeStartObject() 와 gen.writeEndObject()로 시작과 끝을 맺어 주었다.

 

errors는 필드에러와 글로벌에러로 구분되기 때문에 2개로 나뉘어서 집어 넣어주었다.

1
2
            errors.rejectValue("maxPrice","wrongValue","MaxPrice is wrong.");
            errors.reject("wrongPrices","Values of prices are wrong");
cs

다음과 같이 한 필드에 대하여 에러코드를 부과하면 그것은 필드에러이고

전체에 대하여 에러를 부과하면 글로벌 에러이다.

'Spring' 카테고리의 다른 글

[Spring] Rest Docs 이용해보기  (0) 2020.09.21
[Spring] EventResource를 이용한 HATEOAS 적용  (0) 2020.09.21
[Spring] @Autowired 생성자 주입방법에 대해서  (0) 2020.09.18
[Spring] ResponseEntity에 대해서  (0) 2020.09.18
[Spring] @JsonFilter 를 이용한 필드값 필터링하기  (0) 2020.09.16
    'Spring' 카테고리의 다른 글
    • [Spring] Rest Docs 이용해보기
    • [Spring] EventResource를 이용한 HATEOAS 적용
    • [Spring] @Autowired 생성자 주입방법에 대해서
    • [Spring] ResponseEntity에 대해서
    Bepoz
    Bepoz
    https://github.com/Be-poz/TIL

    티스토리툴바