[JAVA](Swing)入力を受けてHTTPリクエスト(GET、POST)を送信


受信
  • 文字列入力
  • Meven+Jackson(IntelliJ)
  • を追加
  • HTTPリクエスト
  • Java Swingを使用して文字列を受信し、HTTPリクエストを送信する方法について説明します。


    1.文字列入力の受信


    300*150サイズのフレームを作成し、JTextFieldとJButtonを追加しました.
    ボタンをクリックして入力を出力するように作成されました.
    JTextFieldに「test」と入力します.

    「転送」(Transfer)ボタンを押すと、サイレント出力ができます.

    コード#コード#

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    
    public class SwingHttpRequest extends JFrame {
    
        JTextField textField = new JTextField(20);
        JButton button = new JButton("전송");
    
        public static void main(String[] args) {
            SwingHttpRequest swingHttpRequest = new SwingHttpRequest();
    
            swingHttpRequest.sendText();
        }
    
        public void sendText() {
            add(textField);
            add(button);
    
            setVisible(true);
            setLayout(new FlowLayout());
            setSize(300, 150);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    
            button.addActionListener(new ActionListener() { // 익명 객체
                @Override
                public void actionPerformed(ActionEvent e) {
                    System.out.println(textField.getText());
                }
            });
        }
    }

    2.Mavenの追加+Jacksonの追加(IntelliJ)


    JSONリクエストの送信に必要なJackson依存性を追加するためにMavenが追加されました.

    (1) Add Framework Support... > Mavenを追加します。



    (2)生成したpom.xmlファイルに次のコードを追加します。

    <dependencies>
    	<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
        	<groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.2</version>
        </dependency>
    </dependencies>

    適用後pom。xml画像



    3.HTTPリクエスト


    HTTPリクエストをHttpURLLConnectionで送信.

    リクエストの送信



    サーバ出力(Spring Boot)



    *ハングルと特殊文字&スペースは転送できません。さらなる処理が必要です。


    GETリクエスト

    
    HttpURLConnection connection = null;
    
    .
    . 중략
    .
    
    	// GET
        public String sendHttpGetRequest(String targetURL, String jsonValues) throws IOException {
            //Create connection
            URL url = new URL(targetURL + jsonToQueryString(jsonValues));
    
            // Send request
            URLConnection connection = null;
    
            connection = url.openConnection();
    
            connection.setRequestProperty("Accept-Charset", "URF-8");
    
            // Get response
            InputStream response = connection.getInputStream();
    
            try (Scanner scanner = new Scanner(response)) {
                String responseBody = scanner.useDelimiter("\\A").next();
                return responseBody;
            }
        }
    
        // json(String) => queryString
        public String jsonToQueryString(String jsonValues) throws JsonProcessingException {
            String queryString  = "";
    
            HashMap<String,Object> jsonMap = null;
    
            jsonMap = new ObjectMapper().readValue(jsonValues, HashMap.class);
    
            for(String strKey : jsonMap.keySet()) {
                queryString += "?" + strKey + "=" + jsonMap.get(strKey);
            }
    
            return queryString;
        }

    POSTリクエスト

    HttpURLConnection connection = null;
    
    .
    . 중략
    .
    
    	// POST
        public String sendHttpPostRequest(String targetURL, String jsonValues) {
            try {
                // Create connection
                URL url = new URL(targetURL);
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
    
                connection.setRequestProperty("Content-Type", "application/json; utf-8");
                connection.setRequestProperty("Content-Length", Integer.toString(jsonValues.getBytes().length));
                connection.setRequestProperty("Content-Language", "en-US");
    
                connection.setUseCaches(false);
                connection.setDoOutput(true);
    
                // Send request
                DataOutputStream wr = new DataOutputStream (connection.getOutputStream());
                wr.writeBytes(jsonValues);
                wr.flush();
                wr.close();
    
                // Get Response
                InputStream is = connection.getInputStream();
                BufferedReader rd = new BufferedReader(new InputStreamReader(is));
                StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+
                String line;
                while ((line = rd.readLine()) != null) {
                    response.append(line);
                    response.append('\r');
                }
                rd.close();
                return response.toString();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }

    完全なコード

    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    public class SwingHttpRequest extends JFrame {
    
        static HttpURLConnection connection = null;
    
        public static void main(String[] args) throws IOException {
            SwingHttpRequest swingHttpRequest = new SwingHttpRequest();
    
            swingHttpRequest.sendText(swingHttpRequest);
        }
    
        public void sendText(SwingHttpRequest swingHttpRequest) {
            JTextField textField = new JTextField(20);
            JButton button = new JButton("GET, POST 요청");
    
            add(textField);
            add(button);
    
            setVisible(true);
            setLayout(new FlowLayout());
            setSize(300, 150);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            button.addActionListener(new ActionListener() { // 익명 객체
                @Override
                public void actionPerformed(ActionEvent e) {
                    Map<String, String> mapValues = new HashMap<>();
                    mapValues.put("value", textField.getText());
                    try {
                        String jsonValues = new ObjectMapper().writeValueAsString(mapValues);
    
                        String getUrl = "http://localhost:8080/get";
                        String postUrl = "http://localhost:8080/post";
    
                        // GET 요청
                        String getResponse = swingHttpRequest.sendHttpGetRequest(getUrl, jsonValues);
                        System.out.println("getResponse : " + getResponse);
    
                        // POST 요청
                        String postResponse = swingHttpRequest.sendHttpPostRequest(postUrl, jsonValues);
                        System.out.println("postResponse : " + postResponse);
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            });
        }
    
        // POST
        public String sendHttpPostRequest(String targetURL, String jsonValues) {
            try {
                // Create connection
                URL url = new URL(targetURL);
                connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
    
                connection.setRequestProperty("Content-Type", "application/json; utf-8");
                connection.setRequestProperty("Content-Length", Integer.toString(jsonValues.getBytes().length));
                connection.setRequestProperty("Content-Language", "en-US");
    
                connection.setUseCaches(false);
                connection.setDoOutput(true);
    
                // Send request
                DataOutputStream wr = new DataOutputStream (connection.getOutputStream());
                wr.writeBytes(jsonValues);
                wr.flush();
                wr.close();
    
                // Get Response
                InputStream is = connection.getInputStream();
                BufferedReader rd = new BufferedReader(new InputStreamReader(is));
                StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+
                String line;
                while ((line = rd.readLine()) != null) {
                    response.append(line);
                    response.append('\r');
                }
                rd.close();
                return response.toString();
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }
    
        // GET
        public String sendHttpGetRequest(String targetURL, String jsonValues) throws IOException {
            //Create connection
            URL url = new URL(targetURL + jsonToQueryString(jsonValues));
    
            // Send request
            URLConnection connection = null;
    
            connection = url.openConnection();
    
            connection.setRequestProperty("Accept-Charset", "URF-8");
    
            // Get response
            InputStream response = connection.getInputStream();
    
            try (Scanner scanner = new Scanner(response)) {
                String responseBody = scanner.useDelimiter("\\A").next();
                return responseBody;
            }
        }
    
        // json(String) => queryString
        public String jsonToQueryString(String jsonValues) throws JsonProcessingException {
            String queryString  = "";
    
            HashMap<String,Object> jsonMap = null;
    
            jsonMap = new ObjectMapper().readValue(jsonValues, HashMap.class);
    
            for(String strKey : jsonMap.keySet()) {
                queryString += "?" + strKey + "=" + jsonMap.get(strKey);
            }
    
            return queryString;
        }
    }
    

    サーバコード(TestControl)

    import com.testserver.ValueVo;
    import org.springframework.web.bind.annotation.*;
    
    @RestController
    public class TestController {
    
        @GetMapping("/get")
        public String getTest(@RequestParam String value) {
            System.out.println("get : " + value);
            return value;
        }
    
        @PostMapping("/post")
        public String postTest(@RequestBody ValueVo valueVo) {
            String value = valueVo.getValue();
            System.out.println("post : " + value);
            return value;
        }
    
    }

    サーバコード(Value VO)

    import lombok.Data;
    
    @Data
    public class ValueVo {
        private String value;
    }
    コメントリンク
    https://stackoverflow.com/questions/1359689/how-to-send-http-request-in-java
    https://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests