현재 위 API를 통해서 프로필 사진과 함께 어느 인덱스의 사진이 메인 프로필 사진인지를 함께 보내주고 있다.
그런데, 스웨거에서 테스트를 해보니 415응답코드가 내려왔다.
뭐지? 하고 서버 로그를 보니
어떤 타입이 잘 안 맞았던 거 같다. 로컬에서 미리 확인을 안해보고 배포를 했더니.. 이런 에러가 떴다.
원인은 indexOfMainImage였다.
포스트맨에서는 타입을 지정해주면 요청이 잘 처리된다.
application/octet-stream는 쉽게 생각하면 서버가 이 요청의 MIME 타입을 알지 못할 때 분류해놓는 값이라고 한다.
우선 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)해서, 쓰기 작업에 이용하지 않도록 해야 한다고 한다.