Mencegah parameter kueri retrofit di-escape

Titik akhir yang perlu saya tanyakan menerima kunci bernama exams yang merupakan array sehingga url menganggur untuk menanyakannya adalah

https://example.com/api/v1/search?exams[]=6&exams[]=7&page=0

Sejauh ini fungsi antarmuka retrofit saya yang menyebutnya

    @GET("search")
    Observable<CustomResponse> search(@Query("search") String query,
                                      @Query("class") int class_id,
                                      @Query("exams[]") ArrayList<Integer> examIds,
                                      @Query("page") int page);

Panggilan terakhir yang dieksekusi berubah menjadi

https://example.com/api/v1/search?exams%5B%5D=6&exams%5B%5D=7&page=0

Bagaimana cara mencegah hal ini terjadi dan mengirim array sebagai parameter kueri. Ini adalah permintaan GET, bukan POST.


person Jude Fernandes    schedule 21.02.2019    source sumber
comment
itu tidak lolos, itu dikodekan. Apakah Anda mengujinya? Ini harus berfungsi apa adanya   -  person Tim    schedule 21.02.2019
comment
@TimCastelijns ya salahku, maksudku disandikan, aku melakukannya dan untuk beberapa alasan aku mendapatkan url yang disandikan, aku berharap itu berfungsi juga karena setiap situs online mengatakan bahwa itu harus berfungsi apa adanya.   -  person Jude Fernandes    schedule 21.02.2019
comment
@Ranjan Permintaan yang saya buat adalah GET bukan POST   -  person Jude Fernandes    schedule 21.02.2019


Jawaban (1)


Coba ini -

@GET("search")
Observable<CustomResponse> search(@Query("search") String query,
                                  @Query("class") int class_id,
                                  @Query(value = "exams[]", encoded = true) ArrayList<Integer> examIds,
                                  @Query("page") int page);
person Ranjan    schedule 21.02.2019
comment
Ini seharusnya berhasil. Dari dokumentasi ›Nama dan nilai parameter dikodekan URL secara default. Tentukan {@link #encoded() encoded=true} * untuk mengubah perilaku ini. Mungkin Anda harus memasukkan encoded true untuk semua pertanyaan. - person Ranjan; 21.02.2019
comment
Saya memiliki contoh yang berfungsi tetapi juga memiliki parameter kueri tunggal di dalamnya. - person Ranjan; 21.02.2019