![](/img/trans.png)
[英]How to convert this curl request to Http post request for file upload in java?
[英]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.