사전 지식
- 직렬화: 자바 객체를 바이트로 변환하는 기술
Getter
, Object To Json- 역직렬화: 바이트를 자바 객체로 변환하는 기술
기본 생성자(따라서 불변 객체 불가능)
, Json To Object
직렬화 - 응답 값으로 자바 객체를 전달할 때 objectMapper가 byte로 변환이 작동, 이 때 Getter가 필요
역직렬화 - 요청 값으로 들어오는 JSON이 자바 객체로 변환이 작동, 이 때 리플렉션이 사용되면서 객체를 생성하기 때문에 기본 생성자가 필수
String dtoToJson = new ObjectMapper().writeValueAsString(dto);
Getter
를 통해 접근한다.@Getter
가 없으면?{}
으로 나오게 된다.@Slf4j
@ControllerAdvice
public class ExceptionController {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MyCustomException.class)
@ResponseBody
public ErrorResponse invalidRequestHandler(MyCustomException e) {
return new ErrorResponse("400", "잘못된 요청입니다");
}
...
}
@RequiredArgsConstructor
public class ErrorResponse {
private final String code;
private final String message;
}
{}
빈 값만 나옴.@Getter // 추가
@RequiredArgsConstructor
public class ErrorResponse {
private final String code;
private final String message;
}
@Getter
를 추가해주면 정상적으로 출력된다{"code":"400","message":"잘못된 요청입니다"}
참고) 자바 리플렉션과 Jackson에 관한 자료
리플렉션 정리
- 리플렉션은 동적으로 객체를 생성해서 무조건 기본 생성자가 있어야함
- 인자가 있는 생성자는 인자 정보를 못가져옴
- 기본 생성자로 객체 생성 → 리플렉션 API로 필드 값 채움
private
or protected
으로 막는 것이 최선