簡體   English   中英

帶有#param 的 curl 請求示例轉換為 Java POST 請求

[英]example of curl request with #param convert to Java POST request

我正在創建 API 來向 SMS Server 發送消息。 API 基於 HTTP 和 JSON。 文檔以 cURL 為例,我需要將其轉換為 JAVA。

要求:

POST https://gateway_ip/api/send_sms

帶有#param 的示例請求:

curl -k --anyauth -u admin:admin -d
'{"text":"#param#","port":[2,3],"param":[{"number":"10086","te
xt_param":["bj"],"user_id":1},{"number":"10086",
"text_param":["ye"],"user_id":2}]}' -H "Content-Type:
application/json" https://gateway_ip/api/send_sms

首先,我創建了 model,它帶有電話號碼、按摩文本和設置端口

class Model {
        private final String number;
        private final String port;
        private final String text;

        public Model(String number, String text) {
            this.number = number;
            this.port = "[0]";
            this.text = text;
        }

        public String getNumber() {
            return number;
        }

        public String getPort() {
            return port;
        }

        public String getText() {
            return text;
        }
    }

JSON 發生器:

private static String toJsonString(List<Model> model) {

        StringWriter jsonObjectWriter = null;
        try {
            com.fasterxml.jackson.core.JsonFactory jsonFactory = new com.fasterxml.jackson.core.JsonFactory();
            jsonObjectWriter = new StringWriter();
            JsonGenerator generator = jsonFactory.createGenerator(jsonObjectWriter);
            generator.setPrettyPrinter(new DefaultPrettyPrinter());

            generator.writeStartObject();
            generator.writeStringField("text", "#param#");
            generator.writeStringField("port", "[0]");
            toJsonString(generator, model);
            generator.writeEndObject();
            generator.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return jsonObjectWriter.toString();
    }

    private static void toJsonString(final JsonGenerator generator, final List<Model> model) throws IOException{

        generator.writeFieldName("param");
        generator.writeStartArray();
        for (final Model m : model) {
            generator.writeStartObject();
            generator.writeStringField("number", m.getNumber());
            toJsonString(generator, m.getText());
            generator.writeEndObject();
        }
        generator.writeEndArray();

    }

    private static void toJsonString(final JsonGenerator generator, String text) throws IOException{

        generator.writeFieldName("text_param");
        generator.writeStartArray();
        generator.writeString(text);
        generator.writeEndArray();

    }

帶有身份驗證的標頭 - 我不確定是否應該包括身份驗證。

private HttpHeaders createHeadersWithAuthentication() {

        String credentials = login + ":" + password;
        byte[] credentialsBytes = Base64.getEncoder().encode(credentials.getBytes());
        String base64Credentials = new String(credentialsBytes);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Basic " + base64Credentials);
        return headers;
    }

執行

public ResponseEntity sendSMSMessage(String phoneNumber, String message) {

        Model model = new Model(phoneNumber, message);
        List<Model> modelList = new ArrayList<>();
        modelList.add(model);
        String createJson = toJsonString(modelList);

        // "https://xx.xx.xx.xx/api/send_sms";
        String url = urlConfig;

        // "Content-Type: application/json"
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> requestEntity = new HttpEntity<String>(createJson, httpHeaders);

        return restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
    }

我不確定我做錯了什么。 從 doc 的命令行示例工作正常,但從我的 Java 代碼中沒有 output。 沒有任何東西發送到短信服務器。 從調試器 Json 看起來不錯。

感謝任何提示和更正。

我正在創建 API 來向 SMS Server 發送消息。 API 基於 HTTP 和 JSON。 文檔以 cURL 為例,我需要將其轉換為 JAVA。

要求:

POST https://gateway_ip/api/send_sms

帶有#param 的示例請求:

curl -k --anyauth -u admin:admin -d
'{"text":"#param#","port":[2,3],"param":[{"number":"10086","te
xt_param":["bj"],"user_id":1},{"number":"10086",
"text_param":["ye"],"user_id":2}]}' -H "Content-Type:
application/json" https://gateway_ip/api/send_sms

首先,我創建了 model,它帶有電話號碼、按摩文本和設置端口

class Model {
        private final String number;
        private final String port;
        private final String text;

        public Model(String number, String text) {
            this.number = number;
            this.port = "[0]";
            this.text = text;
        }

        public String getNumber() {
            return number;
        }

        public String getPort() {
            return port;
        }

        public String getText() {
            return text;
        }
    }

JSON 發生器:

private static String toJsonString(List<Model> model) {

        StringWriter jsonObjectWriter = null;
        try {
            com.fasterxml.jackson.core.JsonFactory jsonFactory = new com.fasterxml.jackson.core.JsonFactory();
            jsonObjectWriter = new StringWriter();
            JsonGenerator generator = jsonFactory.createGenerator(jsonObjectWriter);
            generator.setPrettyPrinter(new DefaultPrettyPrinter());

            generator.writeStartObject();
            generator.writeStringField("text", "#param#");
            generator.writeStringField("port", "[0]");
            toJsonString(generator, model);
            generator.writeEndObject();
            generator.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return jsonObjectWriter.toString();
    }

    private static void toJsonString(final JsonGenerator generator, final List<Model> model) throws IOException{

        generator.writeFieldName("param");
        generator.writeStartArray();
        for (final Model m : model) {
            generator.writeStartObject();
            generator.writeStringField("number", m.getNumber());
            toJsonString(generator, m.getText());
            generator.writeEndObject();
        }
        generator.writeEndArray();

    }

    private static void toJsonString(final JsonGenerator generator, String text) throws IOException{

        generator.writeFieldName("text_param");
        generator.writeStartArray();
        generator.writeString(text);
        generator.writeEndArray();

    }

帶有身份驗證的標頭 - 我不確定是否應該包括身份驗證。

private HttpHeaders createHeadersWithAuthentication() {

        String credentials = login + ":" + password;
        byte[] credentialsBytes = Base64.getEncoder().encode(credentials.getBytes());
        String base64Credentials = new String(credentialsBytes);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Basic " + base64Credentials);
        return headers;
    }

執行

public ResponseEntity sendSMSMessage(String phoneNumber, String message) {

        Model model = new Model(phoneNumber, message);
        List<Model> modelList = new ArrayList<>();
        modelList.add(model);
        String createJson = toJsonString(modelList);

        // "https://xx.xx.xx.xx/api/send_sms";
        String url = urlConfig;

        // "Content-Type: application/json"
        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> requestEntity = new HttpEntity<String>(createJson, httpHeaders);

        return restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
    }

我不確定我做錯了什么。 從 doc 的命令行示例工作正常,但從我的 Java 代碼中沒有 output。 沒有任何東西發送到短信服務器。 從調試器 Json 看起來不錯。

感謝任何提示和更正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM