การใช้งาน API ด้วย Java (Java / Spring Boot)

ตัวอย่างด้านล่างแสดงการใช้งาน API ผ่าน Java สองรูปแบบ:

ใช้ปุ่มด้านล่างเพื่อสลับดูโค้ดตัวอย่างระหว่าง Java และ Spring Boot

Environment:

1. ขอรับ Token (refresh-token และ access-token)

เริ่มต้นด้วยการขอรับ refresh-token และ access-token โดยใช้ username และ password ที่ลงทะเบียนแล้ว

Java: ด้านล่างเป็นตัวอย่าง Java code โดยใช้ HttpClient (Java 11+) เพื่อขอรับ token จาก API

Spring Boot: ตัวอย่าง Spring Boot Controller ที่รับ username, password จาก request และขอ token จาก API

GetTokens.java (Java)

import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

public class GetTokens {
    public static void main(String[] args) throws Exception {
        String username = "your_username";
        String password = "your_password";

        var client = HttpClient.newHttpClient();
        var objectMapper = new ObjectMapper();

        var data = Map.of("username", username, "password", password);
        var request = HttpRequest.newBuilder()
            .uri(URI.create("https://hcode.moph.go.th/api/token/"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(data), StandardCharsets.UTF_8))
            .build();

        var response = client.send(request, HttpResponse.BodyHandlers.ofString());
        Map tokens = objectMapper.readValue(response.body(), Map.class);

        String refreshToken = tokens.get("refresh");
        String accessToken = tokens.get("access");

        System.out.println("Refresh Token: " + refreshToken);
        System.out.println("Access Token: " + accessToken);
    }
}
TokenController.java (Spring Boot)

import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

@RestController
public class TokenController {

    @PostMapping("/get-tokens")
    public ResponseEntity getTokens(@RequestParam(defaultValue="your_username") String username,
                                       @RequestParam(defaultValue="your_password") String password) {
        String url = "https://hcode.moph.go.th/api/token/";

        var data = Map.of("username", username, "password", password);

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity response = restTemplate.postForEntity(url, data, Map.class);

        return ResponseEntity.ok(response.getBody());
    }
}

2. ทดสอบรับ Tokens โดยตรง

รันโค้ดหรือเรียก endpoint ข้างต้นเพื่อรับ token


3. ขอ Access-Token ใหม่เมื่อ Access-Token หมดอายุ

Java: ด้านล่างเป็นตัวอย่างการใช้ refresh-token เพื่อขอ access-token ใหม่

Spring Boot: ใน Spring Boot ท่านสามารถสร้าง Controller สำหรับ refresh token เช่นกัน

RefreshAccess.java (Java)

import java.net.http.*;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

public class RefreshAccess {
    public static void main(String[] args) throws Exception {
        String refreshToken = "your_refresh_token_here";

        var client = HttpClient.newHttpClient();
        var objectMapper = new ObjectMapper();
        var data = Map.of("refresh", refreshToken);

        var request = HttpRequest.newBuilder()
            .uri(URI.create("https://hcode.moph.go.th/api/token/refresh/"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(data), StandardCharsets.UTF_8))
            .build();

        var response = client.send(request, HttpResponse.BodyHandlers.ofString());
        Map result = objectMapper.readValue(response.body(), Map.class);

        String newAccessToken = result.get("access");
        System.out.println("New Access Token: " + newAccessToken);
    }
}
RefreshController.java (Spring Boot)

import org.springframework.web.bind.annotation.*;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

@RestController
public class RefreshController {

    @PostMapping("/refresh-token")
    public ResponseEntity refreshAccessToken(@RequestParam(defaultValue="your_refresh_token_here") String refresh) {
        String url = "https://hcode.moph.go.th/api/token/refresh/";
        var data = Map.of("refresh", refresh);

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity response = restTemplate.postForEntity(url, data, Map.class);

        return ResponseEntity.ok(response.getBody());
    }
}

สรุป: