-
Feign POST 파일 전송 (multipart/form-data)Java 2022. 4. 12. 17:59반응형
FormConfiguration.java
import feign.codec.Encoder; import feign.form.spring.SpringFormEncoder; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.cloud.openfeign.support.SpringEncoder; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; public class FormConfiguration { @Bean public Encoder multipartFormEncoder() { return new SpringFormEncoder(new SpringEncoder(() -> new HttpMessageConverters(new RestTemplate().getMessageConverters()))); } }
Client.java
@FeignClient(name = "a", url = "localhost", fallbackFactory = ClientImpl.class, configuration = FormConfiguration.class) public interface Client { @PostMapping(value = "/text", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) ResultDto getText(@RequestPart(value = "image_file") MultipartFile multipartFile, @RequestPart(value = "type") String type); }
Service.java
private final Client client; private String getText(MultipartFile multipartFile) { ResultDto text = client.getText(multipartFile, "image/jpeg"); return text; }
422 unprocessable entity
feign.FeignException$UnprocessableEntity: [422 Unprocessable Entity] during [POST][{"detail":[{"loc":["body","file"],"msg":"field required","type":"value_error.missing"}]}]
위와 같은 에러를 마주했었다. 원인은 field에 annotation을 잘못지정했었고 FormConfiguration을 잘못 설정했었다. 결론적으로 api의 필수 파라미터를 보내주지 않아서 생긴 오류였다. 참고로 저 응답은 python의 FastAPI 프레임워크 응답이다.
415 Unsupported Media Type
이는 MultipartFile을 생성할 때 이름과 파일명을 지정해주지 않아 발생하였다.
반응형'Java' 카테고리의 다른 글
Feign 다이나믹하게 proxy 사용하기 (0) 2022.04.13 Feign 다이나믹 header (0) 2022.04.12 Feign POST application/x-www-form-urlencoded (0) 2022.04.12 JAVA BufferedImage to MultipartFile (0) 2022.04.12 Java 최대 너비 높이에 맞춰 resize하기 (0) 2022.04.12