Java & Spring

[Spring] RestTemplate을 사용하여 REST API에 데이터 전송

ju_young 2023. 6. 16. 12:29
728x90
    @PostMapping
    public String getFile(@RequestParam MultipartFile attachFile) throws IOException {
        MultiValueMap<String, Object> messageBody = new LinkedMultiValueMap<>();
        messageBody.add("file", attachFile.getResource());

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(messageBody, headers);

        String serverUri = "[API URI]";
        RestTemplate restTemplate = getRestTemplate();

        ResponseEntity<String> serverEntity = restTemplate.postForEntity(serverUri, httpEntity, String.class);
        
        return "redirect:/";
    }
  1. html에서 얻는 파일 name(attachFile)으로 @RequestParam을 통해 얻음
  2. MultiValueMap<>()에 얻은 파일을 추가 (이때 getResource()로 Resource를 추가)
  3. HttpHeaders()에는 MediaType.MULTIPART_FORM_DATA을 지정
  4. 위에서 만든 body, header로 HttpEntity를 만듬
  5. RestTemplate을 생성
  6. RestTemplate.postForEntity에 URI, HttpEntitty, class를 지정 (class=api의 return type)

RestTemplate 생성 코드

    private RestTemplate getRestTemplate() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(3000);
        factory.setReadTimeout(3000);
        factory.setBufferRequestBody(false);
        return new RestTemplate(factory);
    }

 

 

[reference]

https://cnpnote.tistory.com/entry/SPRING-restTemplate%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-Multipart-%ED%8F%BC-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%B3%B4%EB%82%B4%EB%8A%94-%EB%B0%A9%EB%B2%95-Spring-mvc

https://velog.io/@dailylifecoding/Spring-MVC-multipartFile-sending-technique

728x90