컨트롤러 응답을 이렇게 구현했다가 403 Forbidden이 발생해서 5시간 동안 삽질했다.
더 부끄러운 건 로그를 제대로 안 봐서 이 사단이 만들어졌다는 거다..
2024-05-23T01:55:58.686+09:00 WARN 60868 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]
HttpMediaTypeNotAcceptableException라고 명시되어 있는데 응답이 403 Forbidden라 권한 문제로 착각 + WARN 경고여서 그냥 넘겼다...
이렇게 getter를 붙여줘야 직렬화가 되어 JSON 형식으로 응답이 생성된다.
request 데이터 (Json) ➡️ Java 객체(Dto)로 만드는 과정을 역직렬화라고 하고,
Java 객체(Dto) ➡️ response 데이터(Json)로 만드는 과정을 직렬화라고 한다.
Http Body의 Message를 읽기 위해서 스프링은 Http Message Converter에서 Jackson을 사용한다. 역직렬화(Json ➡️ Java객체)는 ObjectMaper를 사용하는데, Jackson Converter도 이와 같이 ObjectMapper를 사용한다.
ObjectMapper는 Setter와 Getter로 DTO의 필드를 가져오기 때문에 Getter를 구현하여 직렬화하는 것이 좋다. Setter를 쓴다고 해도 실제 Setter 메서드가 아니라 reflection 메서드를 통해 주입한다.
'Dev > Java' 카테고리의 다른 글
[Java] Value Object와 Entity에 대한 소신 정리 (0) | 2024.05.19 |
---|---|
[Java] Random 클래스를 사용하면 안 되는 이유 (0) | 2024.05.17 |
[Java] 값 객체(Value Object)란 도대체 뭘까? (0) | 2024.05.12 |
[Java] 필드 동기화로 인한 동시성 문제 해결하기 (by. ThreadLocal) (0) | 2024.05.03 |
[Java] Web server failed to start. Port 5000 was already in use. (MacOS) (1) | 2024.01.24 |