Используйте okhttp, чтобы сделать пост-запрос с целочисленными значениями - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь отправить POST-запрос на сервер с телом.Ожидается, что некоторые значения тела будут целыми числами, а не двойными, а не строками.

Я использую многокомпонентный компоновщик с okhttp, но он принимает только строковые значения в паре имя-значение

Как я могу отправить целое числозначения в виде целых чисел (без кавычек)

Спасибо

1 Ответ

0 голосов
/ 17 марта 2019

Формат для значений multipart/form-data является необработанной строкой без кавычек. Таким образом, нет разницы между целым числом и строкой, как в формате, подобном JSON. Каждое поле в запросе с Content-Type multipart/form-data может также иметь свое собственное значение Content-Type. Поле может быть application/json с текстовым значением JSON, text/html с текстовым значением HTML или даже application/octet с необработанными двоичными данными.

Необработанный запрос в следующем формате:

POST /example.com HTTP/1.1
<additional headers>
Content-Type: multipart/form-data; boundary=vzgD3VXVRH
Content-Length: 1250

--vzgD3VXVRH
Content-Disposition: form-data; name="string"

text value
--vzgD3VXVRH
Content-Disposition: form-data; name="number"

12345
--vzgD3VXVRH
Content-Disposition: form-data; name="json"; filename="example.json"
Content-Type: application/json

{"string":"text value","number":12345}
--vzgD3VXVRH
Content-Disposition: form-data; name="text"; filename="example.txt"
Content-Type: text/plain

The quick brown fox jumps over the lazy dog
--vzgD3VXVRH
Content-Disposition: form-data; name="html"; filename="example.html"
Content-Type: text/html

<!DOCTYPE html>
<html>
<head><title>Page Title</title></head>
<body><h1>Simple HTML doc</h1></body>
</html>
--vzgD3VXVRH
Content-Disposition: form-data; name="binary"; filename="example.bin"
Content-Type: application/octet-stream

<raw binary data>
--vzgD3VXVRH--

Дополнительная информация о спецификации multipart / form-data RFC 7578 .

Обновление:

С учетом того, что вы отправляете запрос в этого API , вы сможете отправлять запрос с параметрами формы application/x-www-form-urlencoded вместо multipart/form-data. multipart/form-data больше подходит для запросов, которые публикуют двоичные данные или загружают файлы.

Вы можете сделать это в OkHttp следующим образом:

OkHttpClient client = new OkHttpClient();
String userId = "12345";

RequestBody formBody = new FormBody.Builder()
        .add("mealTypeId", "7")
        .add("unitId", "321")
        .add("amount", "4.25")
        .add("date", "2019-03-18")
        .build();
Request request = new Request.Builder()
        .url("https://api.fitbit.com/1/user/" + userId + "/foods/log.json")
        .post(formBody)
        .build();

try {
    Response response = client.newCall(request).execute();

} catch (IOException e) {
    // handle error
}
...