스웨거 Content-Type 'application/octet-stream' is not supported 에러 해결하기

Alex·2024년 11월 23일
0

Plaything

목록 보기
28/118

현재 위 API를 통해서 프로필 사진과 함께 어느 인덱스의 사진이 메인 프로필 사진인지를 함께 보내주고 있다.

그런데, 스웨거에서 테스트를 해보니 415응답코드가 내려왔다.
뭐지? 하고 서버 로그를 보니

어떤 타입이 잘 안 맞았던 거 같다. 로컬에서 미리 확인을 안해보고 배포를 했더니.. 이런 에러가 떴다.

원인은 indexOfMainImage였다.

포스트맨에서는 타입을 지정해주면 요청이 잘 처리된다.

application/octet-stream는 쉽게 생각하면 서버가 이 요청의 MIME 타입을 알지 못할 때 분류해놓는 값이라고 한다.

Request가 어떻게 들어오고 있을까?

우선 AbstractMessageConverterMethodArgumentResolve를 확인해보자.

content type이 null로 들어왔다.
null이라서 미디어 타입이 APPLICATION_OCTET_STREAM으로 지정되는 코드가 있다.

여기서 컨버터들을 하나씩 돌아가면서 사용할 수 있는 걸 찾는다.

사용 가능한 컨버터가 없으니 예외가 발생한다.

이걸 해결하려면 컨버터만 추가해주면 된다.

@Component
public class MultipartJackson2HttpMessageConverter extends AbstractJackson2HttpMessageConverter {
    protected MultipartJackson2HttpMessageConverter(ObjectMapper objectMapper) {
        super(objectMapper, MediaType.APPLICATION_OCTET_STREAM);
    }
        
        
        @Override
        public boolean canWrite(Class<?> clazz, MediaType mediaType) {
            return false;
        }

        @Override
        public boolean canWrite(Type type, Class<?> clazz, MediaType mediaType) {
            return false;
        }

        @Override
        protected boolean canWrite(MediaType mediaType) {
            return false;
        }
}

기존 application/octet-stream 타입을 쓰기로 다루는 메시지 컨버터가 이미 존재 (ByteArrayHttpMessageConverter)해서, 쓰기 작업에 이용하지 않도록 해야 한다고 한다.

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글