Tôi đang sử dụng trang bị Thêm cho lớp mạng của mình trong ứng dụng Android, nhưng tôi gặp sự cố với mã hóa URL.Tại sao Retrofit không thể mã hóa chuỗi truy vấn đúng với dấu ngoặc vuông?
tôi phải gọi một API REST như thế:
https://my_hostname.com/some_path?q=some_query¶m[0]=value1¶m[1]=value2&other_param=abcd
như bạn sẽ nhìn thấy chuỗi truy vấn được sáng tác bởi một số loại khác nhau của các thông số, vì vậy tôi quyết định sử dụng @QueryMap
chú thích trong giao diện với Retrofit a Map<String, String>
trong đó q, param[1], param[0], other_param
là các phím chuỗi của bản đồ
Tôi mong đợi điều gì? Tôi hy vọng các dấu ngoặc vuông trong URL được mã hóa với %5B
cho '['
và %5D
cho '['
, nhưng điều này không xảy ra.
Tại sao điều này lại xảy ra? Dấu ngoặc vuông phải được mã hóa bằng mã hóa phần trăm. Đây có phải là một lỗi hoặc tôi đang làm điều gì sai? Tôi cũng đã thử chú thích @EncodedQueryMap
mà không có sự khác biệt.
trông giống như api phần còn lại của bạn nên được kỳ vọng 'params' là một mảng các giá trị – njzk2
tôi nghĩ rằng máy chủ còn lại của bạn không nên sử dụng '[]' trong các tên biến, nhưng thay vì sử dụng nó ở mọi nơi khác, như một chỉ báo danh sách, trong trường hợp đó các dấu ngoặc không cần phải được mã hóa. – njzk2
Nếu không mã hóa khung, API máy chủ sẽ không hoạt động chính xác. Tôi cần phải mã hóa các dấu ngoặc, nhưng tôi muốn biết làm thế nào để làm điều đó với trang bị thêm, và không phải bằng tay. – Noodles