Jadi apa yang dimaksud dengan Multipart dalam protokol Http? Berikut ini kutipan dari protokol http 1.1:
Dalam kasus entitas multibagian, di mana satu atau lebih kumpulan data berbeda digabungkan menjadi satu isi, bidang tipe "multibagian" harus muncul di header entitas (bidang header). Tubuh harus terdiri dari satu atau lebih bagian tubuh, masing-masing didahului oleh garis pembatas batas dan yang terakhir diikuti oleh garis pembatas akhir. Setelah garis pembatas batasnya, setiap bagian body terdiri dari kolom header, baris kosong, dan body.
Uraian di atas agak membingungkan untuk ditulis, namun pemahaman sederhananya bisa sebagai berikut: permintaan posting dapat mendefinisikan beberapa bagian sesuai dengan spesifikasi tertentu;
Berikut ini menggunakan protokol mobile mesh (sebenarnya, permintaan mencakup dua konten xml independen, head xml dan body xml) untuk menggambarkan cara menggunakan Jersey untuk memproses Multipart. Kode utamanya adalah sebagai berikut (server menerimanya di awal Saya tidak tahu cara menulis kodenya, dan saya tidak tahu bagaimana orang lain menulisnya. Kemudian, ketika saya marah, saya mendekompilasi kode paket jersey-multipart-1.0.3.1.jar dan melihatnya, dan kemudian saya mengerti):
String HeadFieldName akhir statis publik = "xmlhead";
String akhir statis publik BodyFieldName = "xmlbody";
//Klien mengirimkan kode
posting String statis publik (String head, String body) melempar BusinessException {
FormDataMultiPart multiPart = FormDataMultiPart baru();
multiPart.field(RequestField.HeadFieldName, kepala, MediaType.MULTIPART_FORM_DATA_TYPE);
multiPart.field(RequestField.BodyFieldName, badan, MediaType.MULTIPART_FORM_DATA_TYPE);
return webResource.type("multipart/form-data").post(String.class, multiPart);
}
// Sisi server menerima kode
@POS
@Produces({MediaType.APPLICATION_XML, MediaType.MULTIPART_FORM_DATA})
@Consumes({MediaType.APPLICATION_XML, MediaType.MULTIPART_FORM_DATA})
layanan String publik (FormDataMultiPart multiPart) memunculkan Pengecualian{
if(multiBagian == null){
if(_logger.isErrorEnabled()){
_logger.error("permintaan FormDataMultiPart adalah null");
}
throw new Exception("permintaan FormDataMultiPart adalah null");
}
Daftar<RequestField> requestFields = ArrayList baru<RequestField>();
for(BodyPart bodyPart : multiPart.getBodyParts()){
String fieldName = ((FormDataBodyPart)bodyPart).getName().trim();
if(fieldName.equalsIgnoreCase(RequestField.HeadFieldName)){
requestFields.add(new RequestField(fieldName, bodyPart.getEntityAs(String.class)));
}
else if(fieldName.equalsIgnoreCase(RequestField.BodyFieldName)){
requestFields.add(new RequestField(fieldName, bodyPart.getEntityAs(String.class)));
}
kalau tidak{
if(_logger.isWarnEnabled()){
_logger.warn("Namabidang tidak valid:" + Namabidang + ",originXml:" + bodyPart.getEntityAs(String.class));
}
}
}
.....
}
<?xml versi="1.0" pengkodean="UTF-8"?>
<InterBOSS>
<Versi>0100</Versi>
<TestFlag>0</TestFlag>
<Tipe BIP>
<BIPCode>BIP2B543</BIPCode>
<Kode Aktivitas>T2001543</Kode Aktivitas>
<KodeAksi>0</KodeAksi>
</BIPTipe>
<Info Perutean>
<OrigDomain>IMPS</OrigDomain>
<Jenis Rute>01</Jenis Rute>
<Perutean>
<Domain Rumah>BOSS</Domain Rumah>
<Nilai Rute>13810494631</Nilai Rute>
</Perutean>
</Info Perutean>
<TransInfo>
<SessionID>2013050815143783928824</SessionID>
<TransIDO>2013050815143783928824</TransIDO>
<TransIDOTime>20130508151437</TransIDOTime>
</InfoTrans>
</InterBOSS>
--Batas_1_30911772_1367997277472
Disposisi Konten: form-data;name="xmlbody"
Tipe Konten: multibagian/data formulir
<?xml versi="1.0" pengkodean="UTF-8"?>
<InterBOSS>
<SvcCont><![CDATA[<subscribeServiceReq>
<msgTransactionID>210001BIP2B543130508151437477294</msgTransactionID>
<berlanggananServInfo>
<oprTime>20130508151436</oprTime>
<actionID>06</actionID>
<effTime>20130508151437</effTime>
<Waktu Kedaluwarsa>30000101000000</Waktu Kedaluwarsa>
<feeUser_ID>13810494631</feeUser_ID>
<destUser_ID>13810494631</destUser_ID>
<actionReasonID>1</actionReasonID>
<servType>210001</servType>
<subServType>FXCJHY</subServType>
<SPID>901508</SPID>
<SPServID>FXCJHY</SPServID>
<accessMode>01</accessMode>
<feeType>2</feeType>
</berlanggananServInfo>
</subscribeServiceReq>]]></SvcCont>
</InterBOSS>
--Batas_1_30911772_1367997277472--