상품 등록시 이미지 업로드가 요구
Front가 있었다면, 업로드 API를 따로 만들어
Frontend
→ Backend
로 요청 endpoint를 만들면 되지만,
Frontend의 부재
테스트의 편의를 위해 이미지 업로드와 상품 등록이 하나의 API에서 수행되게끔 구성
product-service
→ image-manage-service
로 FeignClient
요청
FeignClient
는 기본적으로 application/json
형식을 지원
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeignConfig {
@Bean
public Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
import com.trillionares.tryit.product.infrastructure.config.FeignConfig;
import com.trillionares.tryit.product.presentation.dto.common.base.BaseResponseDto;
import com.trillionares.tryit.product.presentation.dto.productImage.ImageUrlDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
@FeignClient(name="image-manage-service", configuration = FeignConfig.class)
public interface ImageClient {
@PostMapping(value = "/api/s3/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
BaseResponseDto<ImageUrlDto> upload(@RequestPart(value = "productImage", required = false) MultipartFile productImage);
...
}