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();
}
}
|
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 |