2012-01-31 31 views
63

tôi cần phải nhận được một HTTP bài Multipart mà chỉ chứa 2 thông số:REST - HTTP bài Multipart với JSON

  • Một JSON chuỗi
  • Một tập tin nhị phân

nào là đúng cách để thiết lập cơ thể? Tôi sẽ kiểm tra cuộc gọi HTTP bằng giao diện điều khiển Chrome REST, vì vậy tôi tự hỏi liệu giải pháp đúng là đặt khóa "nhãn" cho tham số JSON và tệp nhị phân.

Về phía server Tôi đang sử dụng Resteasy 2.x, và tôi sẽ đọc nội dung Multipart như thế này:

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

Đây có phải là con đường để đi? Có đúng để truy xuất chuỗi JSON của tôi bằng cách sử dụng khóa "myJsonName" xác định rằng bố cục nội dung cụ thể không? Có cách nào khác để nhận 2 nội dung này trong một yêu cầu nhiều HTTP không?

Cảm ơn trước

+1

Loại tài nguyên REST nào? Hai phần liên quan đến cấp độ tài nguyên như thế nào? –

+0

Thực ra cách chúng tôi xử lý tài nguyên này không hoàn toàn là RESTful vì hình ảnh là một "thành phần" của tài nguyên thay vì tài nguyên khác. – thermz

Trả lời

118

Nếu tôi hiểu chính xác, bạn muốn soạn yêu cầu nhiều phần theo cách thủ công từ bảng điều khiển HTTP/REST. Định dạng nhiều phần rất đơn giản; giới thiệu ngắn gọn có thể được tìm thấy in the HTML 4.01 spec. Bạn cần phải tìm ra một ranh giới, là một chuỗi không được tìm thấy trong nội dung, giả sử HereGoes. Bạn đặt tiêu đề yêu cầu Content-Type: multipart/form-data; boundary=HereGoes. Sau đó, đây phải là một yêu cầu hợp lệ:

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

Đó là chính xác những gì tôi cần phải đọc :-) cảm ơn – thermz

+0

Bạn thực sự có thể thêm một tập tin đính kèm trong soap-ui quá. Điều này làm giảm bớt việc phải vượt qua nội dung bài đăng thực tế và loại nội dung. –

+0

Giải thích rõ ràng! – abbasdgr8

Các vấn đề liên quan