REST – HTTP Post Multipart com JSON

Eu preciso receber um HTTP Post Multipart que contém apenas 2 parâmetros:

  • Uma string JSON
  • Um arquivo binário

Qual é a maneira correta de definir o corpo? Vou testar a chamada HTTP usando o console REST do Chrome, por isso estou pensando se a solução correta é definir uma chave “label” para o parâmetro JSON e o arquivo binário.

No lado do servidor, estou usando o Resteasy 2.x, e vou ler o corpo do Multipart assim:

@POST @Consumes("multipart/form-data") public String postWithPhoto(MultipartFormDataInput multiPart) { Map <String, List> 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 } 

É este o caminho a percorrer? É correto recuperar minha cadeia de caracteres JSON usando a chave “myJsonName” que identifica essa disposição de conteúdo específica? Existe alguma outra maneira de receber esses dois conteúdos em uma solicitação de multiparte HTTP?

desde já, obrigado

Se bem entendi, você deseja compor uma solicitação multipartes manualmente a partir de um console HTTP / REST. O formato multipartes é simples; uma breve introdução pode ser encontrada na especificação do HTML 4.01 . Você precisa criar um limite, que é uma string não encontrada no conteúdo, digamos o HereGoes . Você define o header de solicitação Content-Type: multipart/form-data; boundary=HereGoes Content-Type: multipart/form-data; boundary=HereGoes . Então, este deve ser um corpo de solicitação válido:

 --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--