[SPRING] Spring RestTemplate으로 폼 데이터를 POST하는 방법?
SPRINGSpring RestTemplate으로 폼 데이터를 POST하는 방법?
다음 (작동 중) 컬 조각을 RestTemplate 호출로 변환하고 싶습니다.
curl -i -X POST -d "email=first.last@example.com" https://app.example.com/hr/email
전자 메일 매개 변수를 올바르게 전달하는 방법은 무엇입니까? 다음 코드는 404 찾을 수 없음 응답을 가져옵니다.
String url = "https://app.example.com/hr/email";
Map<String, String> params = new HashMap<String, String>();
params.put("email", "first.last@example.com");
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity( url, params, String.class );
Postman에서 올바른 호출을 공식화하려고 시도했으며 본문에서 전자 메일 매개 변수를 "양식 데이터"매개 변수로 지정하여 올바르게 작동하게 할 수 있습니다. RestTemplate에서이 기능을 구현하는 올바른 방법은 무엇입니까?
해결법
-
==============================
1.POST 메소드는 HTTP 요청 오브젝트를 따라 보내야합니다. 요청에는 HTTP 헤더 또는 HTTP 본문 중 하나 또는 둘 모두가 포함될 수 있습니다.
POST 메소드는 HTTP 요청 오브젝트를 따라 보내야합니다. 요청에는 HTTP 헤더 또는 HTTP 본문 중 하나 또는 둘 모두가 포함될 수 있습니다.
그러므로 HTTP 엔티티를 만들고 body에 헤더와 매개 변수를 보냅니다.
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap<String, String> map= new LinkedMultiValueMap<String, String>(); map.add("email", "first.last@example.com"); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers); ResponseEntity<String> response = restTemplate.postForEntity( url, request , String.class );
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html#postForObject-java.lang.String-java.lang.Object-java.lang.Class-java.lang.Object...-
-
==============================
2.혼합 된 데이터를 POST하는 방법 : File, String [], String.
혼합 된 데이터를 POST하는 방법 : File, String [], String.
필요한 것만 사용할 수 있습니다.
private String doPOST(File file, String[] array, String name) { RestTemplate restTemplate = new RestTemplate(true); //add file LinkedMultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); params.add("file", new FileSystemResource(file)); //add array UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("https://my_url"); for (String item : array) { builder.queryParam("array", item); } //add some String builder.queryParam("name", name); //another staff String result = ""; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers); ResponseEntity<String> responseEntity = restTemplate.exchange( builder.build().encode().toUri(), HttpMethod.POST, requestEntity, String.class); HttpStatus statusCode = responseEntity.getStatusCode(); if (statusCode == HttpStatus.ACCEPTED) { result = responseEntity.getBody(); } return result; }
POST 요청의 Body 및 다음 구조에 File이 있습니다.
POST https://my_url?array=your_value1&array=your_value2&name=bob
-
==============================
3.다음은 Spring의 RestTemplate을 사용하여 POST 나머지 호출을 작성하는 전체 프로그램입니다.
다음은 Spring의 RestTemplate을 사용하여 POST 나머지 호출을 작성하는 전체 프로그램입니다.
import java.util.HashMap; import java.util.Map; import org.springframework.http.HttpEntity; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import com.ituple.common.dto.ServiceResponse; public class PostRequestMain { public static void main(String[] args) { // TODO Auto-generated method stub MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); Map map = new HashMap<String, String>(); map.put("Content-Type", "application/json"); headers.setAll(map); Map req_payload = new HashMap(); req_payload.put("name", "piyush"); HttpEntity<?> request = new HttpEntity<>(req_payload, headers); String url = "http://localhost:8080/xxx/xxx/"; ResponseEntity<?> response = new RestTemplate().postForEntity(url, request, String.class); ServiceResponse entityResponse = (ServiceResponse) response.getBody(); System.out.println(entityResponse.getData()); } }
-
==============================
4.당신의 URL 문자열은 당신이 일하기 위해 전달하는지도에 대한 가변 마커를 필요로합니다 :
당신의 URL 문자열은 당신이 일하기 위해 전달하는지도에 대한 가변 마커를 필요로합니다 :
String url = "https://app.example.com/hr/email?{email}";
또는 다음과 같이 쿼리 매개 변수를 String에 명시 적으로 코딩하여지도를 전달하지 않아도됩니다.
String url = "https://app.example.com/hr/email?email=first.last@example.com";
https://stackoverflow.com/a/47045624/1357094도 참조하십시오.
from https://stackoverflow.com/questions/38372422/how-to-post-form-data-with-spring-resttemplate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC 컨트롤러 메서드에서 GET HTTP 요청의 매개 변수 값을 얻는 방법은 무엇입니까? (0) | 2018.12.29 |
---|---|
[SPRING] 스프링 설정 디버깅 (0) | 2018.12.29 |
[SPRING] 최대 절전 모드 : 일반 DAO (0) | 2018.12.29 |
[SPRING] 의존성 주사 란 무엇입니까? [복제] (0) | 2018.12.28 |
[SPRING] Spring MVC에서 캐시 헤더를 어떻게 설정합니까? (0) | 2018.12.28 |