ApiRestController.java(Json으로 받는법)
@RestController
@RequestMapping(value = "/api")
public class ApiRestController {
// JSON api => 127.0.0.1:8080/BOOT1/api/exam1.json
@GetMapping(value = "/exam1.json")
public Map<String, Object> exam1GET(){
Map<String, Object> map = new HashMap<>();
try {
// 다른api를 호출해서 결과를 가져온다음
String url ="http://1.234.5.158:13000/json/exam1.json";
// spring boot에서 제공하는 rest 템플릿
RestTemplate restTemplate = new RestTemplate();
// get을 많이 씀. 그 외에 put,delete,post도 있음
// 호출하는 URL, 반환타입
String response = restTemplate.getForObject(url, String.class);
System.out.println(response.toString());
// 가공된 데이터를 반환
// {"ret":"y","data":"123"}
// 이 부분이 실제로 조금 까다로울 거임.
JSONObject jobj = new JSONObject(response.toString());
String ret1 = jobj.getString("ret"); //y
String ret2 = jobj.getString("data"); //123
System.out.println(ret1 + "," + ret2);
}
catch(Exception e){
e.printStackTrace();
}
return map;
}
}
ApiRestController.java(XML로 받는법)
// XML api => 127.0.0.1:8080/BOOT1/api/exam100.json
@GetMapping (value = "/exam100.json")
public Map<String, Object> exam100GET(){
Map<String, Object> map = new HashMap<>();
try {
// 다른api를 호출해서 결과를 가져온다음
String url ="http://1.234.5.158:13000/xml/exam1.xml";
// spring boot에서 제공하는 rest 템플릿
RestTemplate restTemplate = new RestTemplate();
// 호출하는 URL, 반환타입
String response = restTemplate.getForObject(url, String.class);
// XML을 JSON Object로 변환하기
JSONObject jobj = XML.toJSONObject(response.toString());
System.out.println(jobj.toString());
// {"response":{"items":{"item":[{"name":"one","id":1},{"name":"two","id":2},{"name":"three","id":3}]}}}
JSONObject jobj1 = jobj.getJSONObject("response")
.getJSONObject("items");
// {"item":[{"name":"one","id":1},{"name":"two","id":2},{"name":"three","id":3}]}
System.out.println(jobj1.toString());
// [
// {"name":"one","id":1},
// {"name":"two","id":2},
// {"name":"three","id":3}
// ]
// array 반복문
JSONArray jarr = jobj1.getJSONArray("item");
for(int i=0;i<jarr.length();i++){
//{"name":"one","id":1}
jarr.getJSONArray(i);
}
}
catch(Exception e){
e.printStackTrace();
}
return map;
}
Exam1DTO.java(DTO를 통해 받아오는 방법)
package com.example.dto;
public class Exam1DTO {
String ret;
String data;
}
Exam2DTO.java(DTO를 통해 받아오는 방법)
package com.example.dto;
import java.util.List;
import lombok.Data;
@Data
public class Exam2DTO {
List<Exam1DTO> row;
}
Board1DTO.java(DTO 추가)
package com.example.dto;
import java.sql.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@Data
public class Board1DTO {
long _id;
String title;
String writer;
long hit;
@JsonFormat(pattern = "yyyy-mm-dd HH:mm:ss")
Date regdate;
}
ApiRestController.java(DTO를 통해 받아오는 방법 (JSON))
// JSON api => 127.0.0.1:8080/BOOT1/api/exam2.json
@GetMapping(value = "/exam2.json")
public Map<String, Object> exam2GET() {
Map<String, Object> map = new HashMap<>();
try {
String url = "http://1.234.5.158:13000/json/exam2.json";
RestTemplate restTemplate = new RestTemplate();
Exam2DTO response = restTemplate.getForObject(url, Exam2DTO.class);
for (Exam1DTO obj : response.getRow() ) {
System.out.println(obj.toString());
}
}
catch (Exception e) {
e.printStackTrace();
}
return map;
}
}
--------------------- 여기까진 xml => string => json => 수동-------------------------
xml => string => json => map => dto로(자동)
ApiRestController.java(자동)
// JSON api => 127.0.0.1:8080/BOOT1/api/exam200.json
@GetMapping(value = "/exam200.json")
public Map<String, Object> exam200GET(){
Map<String, Object> map = new HashMap<>();
try {
String url ="http://1.234.5.158:13000/json/exam2.json";
RestTemplate restTemplate = new RestTemplate();
// 문자로 받음
String response = restTemplate.getForObject(
url, String.class);
// JSON객체로 변환
JSONObject json = new JSONObject(response);
ObjectMapper mapper = new ObjectMapper();
// Map -> DTO변환
Exam2DTO exam2 = mapper.convertValue(json.toMap(),
Exam2DTO.class);
System.out.println(exam2.getRow().toString());
}
catch(Exception e){
e.printStackTrace();
}
return map;
}
}
get을 이용한 post 방식으로 전송하는법
// 127.0.0.1:8080/BOOT1/api/post1.json
// 지도, 소셜로그인, 공공DB, 결제, 페이 ...
// 127.0.0.1:8080/BOOT1/api/post1.json
@GetMapping(value="/post1.json")
public Map<String, Object> getMethodName() {
Map<String, Object> map = new HashMap<>();
try {
String url ="http://1.234.5.158:13000/json/post1.json";
// ret, data를 정보를 post방식으로 전송
Map<String, Object> param = new HashMap<>();
param.put("ret","999");
param.put("data","000");
RestTemplate restTemplate = new RestTemplate();
// DTO로 받기, 구조가 복잡하면 String받아서 수동 파싱하기
Exam1DTO response = restTemplate.postForObject(
url, param, Exam1DTO.class);
System.out.println("--------------------------------------");
System.out.println(response.toString());
}
catch(Exception e){
e.printStackTrace();
}
return map;
}