Saya perlu menerima HTTP Post Multipart yang hanya berisi 2 parameter:
- String JSON
- File biner
Manakah cara yang benar untuk mengatur tubuh? Saya akan menguji panggilan HTTP menggunakan konsol REST Chrome, jadi saya ingin tahu apakah solusi yang tepat adalah dengan menyetel kunci "label" untuk parameter JSON dan file biner.
Di sisi server saya menggunakan Resteasy 2.x, dan saya akan membaca badan Multipart seperti ini:
@POST
@Consumes("multipart/form-data")
public String postWithPhoto(MultipartFormDataInput multiPart) {
Map <String, List<InputPart>> params = multiPart.getFormDataMap();
String myJson = params.get("myJsonName").get(0).getBodyAsString();
InputPart imagePart = params.get("photo").get(0);
//do whatever I need to do with my json and my photo
}
Apakah ini cara untuk pergi? Apakah benar untuk mengambil string JSON saya menggunakan kunci "myJsonName" yang mengidentifikasi disposisi konten tertentu? Apakah ada cara lain untuk menerima 2 konten ini dalam satu permintaan multi bagian HTTP?
Terima kasih sebelumnya
Jawaban:
Jika saya memahami Anda dengan benar, Anda ingin membuat permintaan multi bagian secara manual dari konsol HTTP / REST. Format multibagian sederhana; pengantar singkat dapat ditemukan di spesifikasi HTML 4.01 . Anda perlu membuat batas, yang merupakan string yang tidak ditemukan dalam konten, katakanlah
HereGoes
. Anda mengatur header permintaanContent-Type: multipart/form-data; boundary=HereGoes
. Maka ini harus menjadi badan permintaan yang valid:--HereGoes Content-Disposition: form-data; name="myJsonString" Content-Type: application/json {"foo": "bar"} --HereGoes Content-Disposition: form-data; name="photo" Content-Type: image/jpeg Content-Transfer-Encoding: base64 <...JPEG content in base64...> --HereGoes--
sumber
\*
berfungsi sebagai batasan? Itu tidak diizinkan untuk ada di json atau base64.