HttpClientErrorException
라는게 있어서 사용해봤다. 그런데 이게 좋은건지 모르겠다. 다른 API의 예외를 가져오면 내가 예상치 못한 상황에서도 예외를 처리하게 될 것 같은데. 한 번 물어보는게 좋을 것 같다.잭슨 메세지 컨버터를 커스텀해서 리퀘스트를 캐싱하는데 성공했다. 크나큰 삽질이 있었는데, 아무리 생각하고 찾아봐도 스트림을 재사용하는 방법이 없었기 때문이다. 물론 맨 마지막 바이트를 읽지 않고 넘기는 꼼수를 사용해볼 수도 있지만, 이는 예외 가능성이 무궁무진해지는 좋지 않은 방법일 것이다.
해결은 생각보다 허탈했는데, 잘 생각해보니 스트림을 굳이 재사용할 필요가 없었다. 그냥 다시 만들어서 보내면 된다. 스프링의 리퀘스트와 관련된 핸들러들은 HttpMessage라는 것을 사용하여 리퀘스트 정보를 넘기는데, 찾아보니 잭슨에서 사용한 듯한 클래스가 있어서 직접 새로 래핑해 보내줬다. 기존에 사용하는 객체는 바디가 비었는지 확인까지 해주지만, 어차피 리퀘스트를 캐싱화는 과정에서 매핑을 한 번 해주기 때문에 이 점만 봤을때는 문제가 없을 것 같다.
하면서 많이 배웠는데, PushBackInputStream
이나 리셋을 시키는 방법 등을 보게 된 것 같다. 스트림도 이제 감이 좀 잡히는 것 같다.
Powered with by Gatsby 2.0