뭔짓을 해도 restTemplate으로 multipart/form-data에서 이미지같은 파일을 보낼 수 없는 경우

규바·2024년 11월 19일
1

트러블슈팅

목록 보기
3/7

뭔짓을 해도 restTemplate으로 multipart/form-data에서 이미지같은 파일을 보낼 수 없는 경우.

자꾸 404만 응답되고 postman에서는 잘되는데 코드로는 잘 안될 때

헤더를 요래조래 해보고 🤯🤯
파일을 여기에 담고 저기에 담아서 보내봐도 안되었던 경우 😰😰

OkHttp를 사용하는 방식으로 바꿔보셔요..

restTemplate은 레거시래요. 저는 몰랐어요.
WebClient를 spring에서는 추천한대요. 근데 이것도 잘 안됐습니다. 일단 급하다면 OkHttp를 써보시면 좋을듯

간단히 사용하는 법만 적겠습니다.

implementation 'com.squareup.okhttp3:okhttp:4.9.1'
버전 여기서 참고

@Configuration
public class HttpClientConfig {
    @Bean
    public OkHttpClient okHttpClient() {
        return new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .build();
    }
}

호출하기 예시코드

    private final ObjectMapper objectMapper;
    private final OkHttpClient okHttpClient;
    
	// 메서드
    public ApickApiResponse compareImages(MultipartFile baseImage, List<MultipartFile> compareImages) throws IOException {
        byte[] baseImageBytes = baseImage.getBytes();
        
        MultipartBody.Builder bodyBuilder = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("image", baseImage.getOriginalFilename(),
                        RequestBody.create(baseImageBytes, MediaType.parse("image/*")));
                    compareImage.getOriginalFilename(),
                    RequestBody.create(compareImage.getBytes(), MediaType.parse("image/*")));
        }

        Request request = new Request.Builder()
                .url(apiUrl)
                .header("KEY", apiKey)
                .post(bodyBuilder.build())
                .build();

        try (Response response = okHttpClient.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new BusinessException(ErrorCode.API_CALL_FAILED);
            }

            assert response.body() != null;
            return objectMapper.readValue(response.body().string(), ApickApiResponse.class);
        }
    }
profile
그때그때 학습하고 있는 내용을 올려요

0개의 댓글