HttpPost 를 사용해서 이전에 생성했던 API를 테스트해보겠습니다. API에 의해 자동 생성된 URL 정보 http://127.0.0.1:8080/TEST/API/Pb7V-CGuFyzg_9qvu2zhQDq0ne50KS-kvNab9K44ArI 을 가지고 실제 데이터를 조회 하겠습니다.
여기서 사용된 Pb7V-CGuFyzg_9qvu2zhQDq0ne50KS-kvNab9K44ArI가 실제 jwt의 시그니처 데이터이며 이것을 이용해 토큰을 확인하고 데이터를 파싱 하겠습니다.
우선 그전에 기본적인 API 호출 메소드를 생성해보겠습니다. 개발에 사용되는 라이브러리는 다음과 같습니다. com.mashape.unirest.http
참고 바랍니다. 우선 호출 할 데이터를 JSON String으로 선언하도록 하겠습니다.
ObjectMapper mapper = new ObjectMapper();
String json = "";
Map<String, Object> map = new HashMap<String, Object>();
ArrayList<String> arrList = new ArrayList<String>();
arrList.add("aaaa");
arrList.add("bbbb");
map.put("name", "testName");
map.put("alpa", arrList);
json = mapper.writeValueAsString(map);
json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map); // pretty print
System.out.println(json);
위 내용은 임시 데이터를 Map에 설정 하는 것입니다. 여기서는 alpa를 배열로 선언 하였습니다. 배열은 사용하는 예제이며 만약 배열을 사용하지 않는 다면 다음과 같이 하면 됩니다.
ObjectMapper mapper = new ObjectMapper();
String json = "";
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "testName");
map.put("alpa1", "aaaa");
map.put("alpa2", "bbbb");
json = mapper.writeValueAsString(map);
json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map); // pretty print
System.out.println(json);
하지만 위와 같이 선언 한다면 키가 같은 경우는 아마도 요청 시 키도 같이 전달받아 처리해야 합니다. 이점 주의 하시기 바랍니다.
이제 다음의 메소드를 이용해 URL 호출할 수 있습니다.
private void doHttpClient2(String url, String jsonStr) {
HttpClient httpClient = new DefaultHttpClient();
try {
HttpPost request = new HttpPost(url);
StringEntity params =new StringEntity(jsonStr);
System.out.println(params.toString());
request.addHeader("content-type", "application/json");
request.addHeader("Accept","application/json");
request.setEntity(params);
// handle response here...
}catch (Exception ex) {
// handle exception here
} finally {
httpClient.getConnectionManager().shutdown();
}
}
위 코드는 테스트 이라는 것 참고하시기 바랍니다. 위 메소드를 사용하는 경우 doHttpClient2(url, json); 이런 식으로 호출하면 됩니다.
위와 같이 사용하지 않고 JSON String을 직접 본문에 추가하여 전달 할 수도 있는데 본문에 추가하는 경우는 다음과 같이 사용이 가능합니다.
String bodyStr = "{\r\n \"Index\":\"adfasdf\",\r\n \"FromDate\": \"2018-07-01 11:43:00\",\r\n \"ToDate\": \"2018-07-30 14:27:20\",\r\n \"Size\": 5,\r\n \"name\": \"root\",\r\n \"data\": \"none\"\r\n}";
HttpResponse response = Unirest.post(url).header("content-type", "application/json").header("cache-control", "no-cache").body(bodyStr).asString();
본문 설정이 어렵습니다. 오타의 위험도 있고요 그래서 추천하지는 않습니다. 아니면 JSONObject를 이용하는 것도 좋은 방법인 것 같습니다. 위 내용 참고해서 URL 호출 해보시기 바랍니다.