วิธีการ Call api service ภายนอก ด้วย RestTemplate with.exchange on java spring framework with post api example

Ploy Thanasornsawan
2 min readApr 23, 2019

RestTemplate คืออะไร สั้นๆคือเป็น module ที่ช่วยในการ call service เรียกใช้ api จากภายนอก ซึ่ง service ในที่นี้ เราสามารถใช้ Rest api ได้ทุก method เลยไม่ว่าจะ get, post, put, delete

ยกตัวอย่าง.. เราทำหน้าเว็บเช็คหนังใหม่ แน่นอนว่าเราไม่รู้ข้อมูลหนังใหม่ด้วยตัวเองอยู่แล้ว เพราะเราไม่ใช่เจ้าของโรงภาพยนต์ เราก็ไป GET ดึงข้อมูลจากเว็บหนัง Major cineplex -> GET: http://www.majorcineplex.com/cinema

ทีนี้เราก็จะได้ข้อมูลก้อน request ก้อนใหญ่มา เราอยากจะให้ data ของเรา response ออกมาในลักษณะ type ไหนอย่าง string , object หรือ array เราก็ต้องมีการเอา module RestTemplate เข้ามาช่วยจัดการ request ตรงนี้ว่าเราต้องการทำยังไงกับ data ซึ่งในบทความนี้จะขอยกตัวอย่างกรณีการใช้งานเรื่อง .exchange

ลักษณะการใช้งาน .exchange อ้างอิง datasheet ตามเว็บไซต์

วิธีการใช้งาน RestTemplate.exchange

จะเห็นว่ามีหลายรูปแบบการเขียนมาก เราก็ลองสังเกตจากโจทย์การใช้งานของเราดู อย่างเช่น เราต้องการส่งค่าจำนวนเงินของเลขที่บัญชีนี้โดยบุคคลนามสมมติ A ไปที่ service api http://localhost/payment-gateway/account แล้วต้องการข้อมูลตอบกลับมาในลักษณะ string ว่าทำรายการชำระเงินสำเร็จ ณ เวลาใด

จากเหตุการณ์นี้ เราจะเห็นว่าเป็นการทำธุรกรรมทางการเงิน และมีการส่งข้อมูลไปร้องขอการตอบกลับ แบบนี้จะต้องเลือกใช้ Rest api method (post) และเราเลือกที่จะ specific url ในการ request ข้อมูลไป ดังนั้นเลือก .exchange วิธี

ยกตัวอย่างการใช้งาน
RestTemplate rest = new RestTemplate(clientHttpRequestFactory());
ResponseEntity<String> response = rest.exchange(http://localhost/payment-gateway/account, HttpMethod.POST, entity, String.class);

แต่ทีนี้การจะส่งก้อนข้อมูลไปใน request ได้ ส่งไปในลักษณะของ json เราจะต้องเอา HttpEnity มาช่วย

HttpEntity<String> entity = new HttpEntity<String>(data, headers);

ใน java การจะทำกลุ่มข้อมูล data ให้เป็น json จะใช้ Gson

Gson gson = new Gson();
String data= gson.toJson(ObjectString);

ส่วน headers ใน library http เรื่อง request media type อาจเป็นได้หลายรูปแบบ เช่น xml, jpeg, gif หรือ json เป็นต้น เราก็ทำการ set ให้ http request นี้รู้ว่าเราจะส่งข้อมูลไปในรูปแบบ json ได้ตามนี้

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

อ้างอิง datasheet ตัวอย่างการใช้งาน httpEnity จาก

แต่เมื่อเราต้องการแกะข้อมูล response ที่ได้หลังทำการส่ง request post ไปแล้วในรูปแบบของ json เราสามารถเขียนได้ว่า

JsonObject jsonObj = gson.fromJson(response.getBody(), JsonObject.class);

ทีนี้เราต้องการข้อมูล response ตัวไหนที่ได้กลับมาจาก request ของเรา ก็ใช้ jsonObj.get(“key”).getAsString(); ได้เลย เช่น เรารู้ว่าข้อมูลตอบกลับจะเป็น

status: “success” หรือ status: “fail” เราก็สามารถเขียนได้ว่า

String responseStatus = jsonObj.get(“status”).getAsString();

ซึ่งนอกจากวิธี .exchange ใน RestTemplate แล้ว เรายังสามารถลองวิธีอื่นๆในการ get, post, update และ delete ได้ตามตัวอย่างของเว็บนี้

--

--

Ploy Thanasornsawan
Ploy Thanasornsawan

Written by Ploy Thanasornsawan

Sharing knowledge about security and automation techniques.

No responses yet