REST-JSON을 사용한 HTTP 포스트 멀티 파트


88

2 개의 매개 변수 만 포함하는 HTTP Post Multipart를 수신해야합니다.

  • JSON 문자열
  • 바이너리 파일

신체를 설정하는 올바른 방법은 무엇입니까? Chrome REST 콘솔을 사용하여 HTTP 호출을 테스트 할 예정이므로 올바른 솔루션이 JSON 매개 변수와 바이너리 파일에 대한 "label"키를 설정하는 것인지 궁금합니다.

서버 측에서는 Resteasy 2.x를 사용하고 있으며 다음과 같이 Multipart 본문을 읽을 것입니다.

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

이게 갈 길 이니? 특정 콘텐츠 처리를 식별하는 "myJsonName"키를 사용하여 JSON 문자열을 검색하는 것이 맞습니까? 하나의 HTTP 멀티 파트 요청에서이 두 콘텐츠를 수신하는 다른 방법이 있습니까?

미리 감사드립니다


1
이것은 어떤 종류의 REST 리소스입니까? 리소스 수준에서 두 부분은 어떤 관련이 있습니까?

실제로 이미지가 다른 리소스가 아닌 리소스의 "구성 요소"이기 때문에이 리소스를 처리하는 방식은 완전히 RESTful이 아닙니다.
thermz

답변:


148

올바르게 이해했다면 HTTP / REST 콘솔에서 수동으로 멀티 파트 요청을 작성하고 싶습니다. 멀티 파트 형식은 간단합니다. 간단한 소개는 HTML 4.01 사양에서 찾을 수 있습니다 . 콘텐츠에서 찾을 수없는 문자열 인 경계를 만들어야 HereGoes합니다. 요청 헤더를 설정했습니다 Content-Type: multipart/form-data; boundary=HereGoes. 그러면 유효한 요청 본문이어야합니다.

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

실제로 soap-ui에 첨부 파일을 추가 할 수도 있습니다. 이렇게하면 실제 게시물 본문과 콘텐츠 유형을 전달해야하는 필요성이 줄어 듭니다.
shane lee 2014

1
고유 한 경계를 만드는 표준화 된 방법이 있습니까?
andig

2
@andig 나는 아무것도 모른다. 아마도 UUID를 사용할 수 있지만 반드시 좋은 생각은 아닙니다. 일반적으로 HTTP 라이브러리가이를 처리해야합니다.
Vasiliy Faronov 2015.03.12

요청에 json 및 base64 데이터 만 있다는 것을 알고 있다면 \*예를 들어 경계로 작동 하지 않아야합니다 . json이나 base64에 존재할 수 없습니다.
DaedalusAlpha 2011

2
왜 base64를 사용하여 JPEG 데이터를 인코딩합니까? HTTP를 사용하면 원시 바이트를 보낼 수 있습니다.
Alexandre Blin 2017
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.