[SPRING] List 또는 String 배열을 Spring RestTemplate을 사용하여 getForObject에 전달하는 방법
SPRINGList 또는 String 배열을 Spring RestTemplate을 사용하여 getForObject에 전달하는 방법
나는 봄과 함께 편안한 서비스를 개발 중이다. 내 서비스 컨트롤러에 매개 변수로 문자열 배열 또는 큰 문자열을 전달 / 가져 오는 데 문제가 있습니다. 내 코드 예제는 아래와 같다.
제어 장치:
@RequestMapping(value="/getLocationInformations/{pointList}", method=RequestMethod.GET)
@ResponseBody
public LocationInfoObject getLocationInformations(@PathVariable("pointList") String pointList)
{
// code block
}
샘플 포인트 목록 :
String pointList = "37.0433;35.2663,37.0431;35.2663,37.0429;35.2664,37.0428;35.2664,37.0426;35.2665,37.0424;35.2667,37.0422;35.2669,37.042;35.2671,37.0419;35.2673,37.0417;35.2674,37.0415;35.2674,37.0412;35.2672,37.0408;35.267,37.04;35.2667,37.0396;35.2665,37.0391;35.2663,37.0388;35.2662,37.0384;35.266,37.0381;35.2659,37.0379;35.2658,37.0377;35.2657,37.0404;35.2668,37.0377;35.2656,37.0378;35.2652,37.0378;35.2652,37.0381;35.2646,37.0382;35.264,37.0381;35.2635,37.038;35.263,37.0379;35.2627,37.0378;35.2626,37.0376;35.2626,37.0372;35.2627,37.0367;35.2628,37.0363;35.2628,37.036;35.2629,37.0357;35.2629,37.0356;35.2628,37.0356;35.2628,37.0355;35.2626";
웹 서비스 고객 코드 :
Map<String, String> vars = new HashMap<String, String>();
vars.put("pointList", pointList);
String apiUrl = "http://api.website.com/service/getLocationInformations/{pointList}";
RestTemplate restTemplate = new RestTemplate();
LocationInfoObject result = restTemplate.getForObject(apiUrl, LocationInfoObject.class, vars);
클라이언트 쪽 응용 프로그램을 실행할 때 HttpClientErrorException throw합니다 : 400 잘못된 요청, 긴 위치 정보 문자열이이 문제를 일으키는 것 같아요. 그렇다면이 문제를 어떻게 해결할 수 있습니까? 또는 웹 서비스에 매개 변수로 긴 문자열 값을 게시 할 수 있습니까?
모두들
해결법
-
==============================
1.List 또는 다른 유형의 객체는 RestTemplate의 postForObject 메소드로 게시 할 수 있습니다. 내 솔루션은 아래와 같습니다.
List 또는 다른 유형의 객체는 RestTemplate의 postForObject 메소드로 게시 할 수 있습니다. 내 솔루션은 아래와 같습니다.
제어 장치:
@RequestMapping(value="/getLocationInformations", method=RequestMethod.POST) @ResponseBody public LocationInfoObject getLocationInformations(@RequestBody RequestObject requestObject) { // code block }
서비스에 게시 할 요청 개체를 만듭니다.
public class RequestObject implements Serializable { public List<Point> pointList = null; } public class Point { public Float latitude = null; public Float longitude = null; }
응답 객체를 만들어 서비스에서 값을 가져옵니다.
public class ResponseObject implements Serializable { public Boolean success = false; public Integer statusCode = null; public String status = null; public LocationInfoObject locationInfo = null; }
요청 객체를 가진 포스트 포인트 목록과 서비스로부터 응답 객체 얻기 :
String apiUrl = "http://api.website.com/service/getLocationInformations"; RequestObject requestObject = new RequestObject(); // create pointList and add to requestObject requestObject.setPointList(pointList); RestTemplate restTemplate = new RestTemplate(); ResponseObject response = restTemplate.postForObject(apiUrl, requestObject, ResponseObject.class); // response.getSuccess(), response.getStatusCode(), response.getStatus(), response.getLocationInfo() can be used
-
==============================
2.먼저 매개 변수로 맵을 전달했지만 컨트롤러가이를 경로 변수로 간주합니다. 'pointlist'값을 URL의 일부 (중괄호 자리 표시 자 없음)로 만드는 것만으로하면됩니다. 예 :
먼저 매개 변수로 맵을 전달했지만 컨트롤러가이를 경로 변수로 간주합니다. 'pointlist'값을 URL의 일부 (중괄호 자리 표시 자 없음)로 만드는 것만으로하면됩니다. 예 :
http://api.website.com/service/getLocationInformations/pointList
다음으로 위치 정보 객체가 적절한 표현 (JSON 제안)으로 정렬되고 같은 방식으로 정렬되도록 메시지 변환기를 설정해야합니다.
나머지 템플리트의 경우 :
restTemplate.setMessageConverters(...Google MappingJackson2HttpMessageConverter...);
서버의 경우 classpath에 Jackson을 추가하기 만하면됩니다. 여러 개의 표현을 수동으로 구성해야하는 경우 Google이 여기에 친구가됩니다.
from https://stackoverflow.com/questions/22507129/how-to-pass-list-or-string-array-to-getforobject-with-spring-resttemplate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Jdbc 선언적 트랜잭션은 생성되었지만 아무것도 수행하지 않는다. (0) | 2019.04.14 |
---|---|
[SPRING] HttpSessionListener 구현 내부의 Dependency Injection (0) | 2019.04.14 |
[SPRING] SpringApplication 기호를 확인할 수 없습니다. (0) | 2019.04.14 |
[SPRING] Spring Security : 페이지의 북마크를 허용하기 위해 로그인 URL에 리디렉션 쿼리 매개 변수를 추가하는 방법은 무엇입니까? (0) | 2019.04.14 |
[SPRING] 스프링 보안 역할 계층 구조 문제 (0) | 2019.04.14 |