Возникла проблема при использовании службы REST Azure Storage Table.Даже ресурс присутствует в моей учетной записи хранения при использовании службы (вставка сущности) с ошибкой «Указанный ресурс не существует» со статусом ответа 400.
Я пытался с помощью Jersy restful API для использования AZURE Storage Service API.В соответствии с документацией Microsoft я пытался использовать эту услугу.Ссылка на документ: https://docs.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key
2) Я также пытался выполнить операцию GET ... в этом случае Ответ возвращает 400: причина = Значение одного из заголовков HTTP не в правильном формате.
3) То же самое и с POSTMAN к тому времени также столкнулись с тем же ответом, что и выше.
import java.net.*;
import java.util.*;
import java.text.*;
import javax.crypto.*;
import javax.crypto.spec.*;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.commons.codec.binary.Base64;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class InsertEntity_new {
private static Base64 base64 = new Base64();
public static void signRequestSK(WebTarget target, String account, String key, Client client) throws Exception {
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat fmt = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
String date = fmt.format(Calendar.getInstance().getTime()) + " GMT";
StringBuilder sb = new StringBuilder();
sb.append("POST\n"); // method
sb.append('\n'); // md5 (optional)
sb.append('\n'); // content type
sb.append('\n'); // legacy date
sb.append("x-ms-date:" + date + '\n'); // headers
sb.append("x-ms-version:2009-09-19\n");
sb.append("/" + account + request.getURL().getPath()); //CanonicalizedResource
// System.out.println(sb.toString());
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(base64.decode(key), "HmacSHA256"));
String authKey = new String(base64.encode(mac.doFinal(sb.toString().getBytes("UTF-8"))));
String auth = "SharedKeyLite " + account + ":" + authKey;
client.property("x-ms-date", date);
client.property("Authorization", auth);
client.property("x-ms-version", "2009-09-19");
String jsonInString = "{\"PartitionKey\":\"mypartitionkey\",\"RowKey\":\"001\",\"Email\":\"ramesh@gmail.com\",\"PhoneNumber\":\"908265370\"}";
Response resp = target.request(MediaType.APPLICATION_JSON).post(Entity.entity(jsonInString, MediaType.APPLICATION_JSON));
System.out.println("Response" + resp);
}
public static void main(String args[]) throws Exception {
String account = "storageacctname";
String key = "storageaccountkey";
Client client = ClientBuilder.newClient();
WebTarget target = client.target("https://" + account + ".table.core.windows.net/mytable");
signRequestSK(target, account, key,client);
}
}
Я ожидаю, что моей программе нужно вставить сущность в мою таблицу хранения.