简体   繁体   English

带有#param 的 curl 请求示例转换为 Java POST 请求

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

I am creating API to send messages to SMS Server.我正在创建 API 来向 SMS Server 发送消息。 API is based on HTTP and JSON. API 基于 HTTP 和 JSON。 Documentation takes cURL as an example I need convert it to JAVA.文档以 cURL 为例,我需要将其转换为 JAVA。

Request:要求:

POST https://gateway_ip/api/send_sms

Example Request with #param:带有#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

First I create model that take phone number, massage text and setup port首先,我创建了 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 generator: 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();

    }

Headers with authentication - I am not sure if I should include authentication.带有身份验证的标头 - 我不确定是否应该包括身份验证。

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;
    }

Execution执行

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);
    }

I am not sure what I did wrong.我不确定我做错了什么。 From command line example from doc working fine but from my Java Code there is no output.从 doc 的命令行示例工作正常,但从我的 Java 代码中没有 output。 Nothing was send to Sms Server.没有任何东西发送到短信服务器。 From debuger Json looks fine.从调试器 Json 看起来不错。

Appreciate for any hints and correction.感谢任何提示和更正。

I am creating API to send messages to SMS Server.我正在创建 API 来向 SMS Server 发送消息。 API is based on HTTP and JSON. API 基于 HTTP 和 JSON。 Documentation takes cURL as an example I need convert it to JAVA.文档以 cURL 为例,我需要将其转换为 JAVA。

Request:要求:

POST https://gateway_ip/api/send_sms

Example Request with #param:带有#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

First I create model that take phone number, massage text and setup port首先,我创建了 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 generator: 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();

    }

Headers with authentication - I am not sure if I should include authentication.带有身份验证的标头 - 我不确定是否应该包括身份验证。

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;
    }

Execution执行

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);
    }

I am not sure what I did wrong.我不确定我做错了什么。 From command line example from doc working fine but from my Java Code there is no output.从 doc 的命令行示例工作正常,但从我的 Java 代码中没有 output。 Nothing was send to Sms Server.没有任何东西发送到短信服务器。 From debuger Json looks fine.从调试器 Json 看起来不错。

Appreciate for any hints and correction.感谢任何提示和更正。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM