Preciso receber um HTTP Post Multipart que contém apenas 2 parâmetros:
- Uma string JSON
- Um arquivo binário
Qual a forma correta de definir o corpo? Vou testar a chamada HTTP usando o console REST do Chrome, então estou me perguntando se a solução correta é definir uma chave de "rótulo" 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<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
}
É este o caminho a percorrer? É correto recuperar minha string JSON usando a chave "myJsonName" que identifica essa disposição de conteúdo específica? Existe alguma outra maneira de receber esses 2 conteúdos em uma solicitação multiparte HTTP?
desde já, obrigado
Respostas:
Se bem entendi, você deseja redigir uma solicitação multiparte manualmente a partir de um console HTTP / REST. O formato multiparte é simples; uma breve introdução pode ser encontrada nas especificações do HTML 4.01 . Você precisa criar um limite, que é uma string não encontrada no conteúdo, digamos
HereGoes
. Você define o cabeçalho da solicitaçãoContent-Type: multipart/form-data; boundary=HereGoes
. Então, este deve ser um corpo de solicitação válido:fonte
\*
por exemplo, não deveria funcionar como um limite? Não é permitido existir em json nem em base64.