ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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을 생성할 때 이름과 파일명을 지정해주지 않아 발생하였다.

     

     

     

    반응형
Designed by Tistory.