Jersey handles the details of the Multipart in the Http protocol based on JAVA

  • 2020-04-01 01:53:25
  • OfStack

        So what is a Multipart in the Http protocol? Here is a quote from HTTP 1.1:
In the case of multipart entity, where one or more different sets of data are in a single body, the "multipart" type field must appear in the entity's header. The body must contain one or more body parts, each of which precedes the boundary delimiter and the last one is followed by an end boundary delimiter. After its boundary delimiter line, each individual part is composed of header field, blank line and body.
        The above description is a bit of a mouthful, which can be simply interpreted as: a post request, which can be defined in several parts according to certain specifications;

        The mobile mesh network protocol (is actually a request includes two separate XML content, a head of XML, XML) a body to illustrate how to use the Jersey handling Multipart, mainly as follows (at the start of the server side to receive the code anyway don't know how to write also didn't find what other people write, later a angry, decompiled Jersey - Multipart - 1.0.3.1. Watched the jar package code, just understand) :


private static WebResource webResource = client.resource("http://xxx.xx.xx:xxx"); 

public static final String HeadFieldName = "xmlhead"; 
public static final String BodyFieldName = "xmlbody"; 

  
//Client send code
public static String post(String head, String body) throws BusinessException { 
        FormDataMultiPart multiPart = new FormDataMultiPart(); 
        multiPart.field(RequestField.HeadFieldName, head, MediaType.MULTIPART_FORM_DATA_TYPE); 
        multiPart.field(RequestField.BodyFieldName, body, MediaType.MULTIPART_FORM_DATA_TYPE); 
        return webResource.type("multipart/form-data").post(String.class, multiPart); 
    } 

//The Server side receives the code
          @POST
    @Produces({MediaType.APPLICATION_XML, MediaType.MULTIPART_FORM_DATA}) 
    @Consumes({MediaType.APPLICATION_XML, MediaType.MULTIPART_FORM_DATA})    
    public String service(FormDataMultiPart multiPart) throws Exception{ 
        if(multiPart == null){ 
            if(_logger.isErrorEnabled()){ 
                _logger.error("the request FormDataMultiPart is null"); 
            } 

            throw new Exception("the request FormDataMultiPart is null"); 
        } 

        List<RequestField> requestFields = new ArrayList<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))); 
            } 
            else{ 
                if(_logger.isWarnEnabled()){ 
                    _logger.warn("invalid fieldName:" + fieldName + ",originXml:" + bodyPart.getEntityAs(String.class)); 
                } 
            } 
        } 

        ..... 
    }

The actual post message captured by the tool:

POST /ba/resources/bossServer HTTP/1.1
Content-Type: multipart/form-data;boundary=Boundary_1_30911772_1367997277472
MIME-Version: 1.0
User-Agent: Java/1.6.0_10-rc2
Host: 192.168.245.18:8082
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 1600
--Boundary_1_30911772_1367997277472
Content-Disposition: form-data;name="xmlhead"
Content-Type: multipart/form-data
<?xml version="1.0" encoding="UTF-8"?>
<InterBOSS>
    <Version>0100</Version>
    <TestFlag>0</TestFlag>
    <BIPType>
        <BIPCode>BIP2B543</BIPCode>
        <ActivityCode>T2001543</ActivityCode>
        <ActionCode>0</ActionCode>
    </BIPType>
    <RoutingInfo>
        <OrigDomain>IMPS</OrigDomain>
        <RouteType>01</RouteType>
        <Routing>
            <HomeDomain>BOSS</HomeDomain>
            <RouteValue>13810494631</RouteValue>
        </Routing>
    </RoutingInfo>
    <TransInfo>
        <SessionID>2013050815143783928824</SessionID>
        <TransIDO>2013050815143783928824</TransIDO>
        <TransIDOTime>20130508151437</TransIDOTime>
    </TransInfo>
</InterBOSS>
--Boundary_1_30911772_1367997277472
Content-Disposition: form-data;name="xmlbody"
Content-Type: multipart/form-data
<?xml version="1.0" encoding="UTF-8"?>
<InterBOSS>
<SvcCont><![CDATA[<subscribeServiceReq>
    <msgTransactionID>210001BIP2B543130508151437477294</msgTransactionID>
    <subscribeServInfo>
        <oprTime>20130508151436</oprTime>
        <actionID>06</actionID>
        <effTime>20130508151437</effTime>
        <expireTime>30000101000000</expireTime>
        <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>
    </subscribeServInfo>
</subscribeServiceReq>]]></SvcCont>
</InterBOSS>
--Boundary_1_30911772_1367997277472--


Related articles: