Tôi hiện đang cố viết phương thức ReST chấp nhận tải lên tệp. Khi người dùng gửi tệp, tôi cũng muốn họ thêm mô tả và một số dữ liệu meta khác liên quan đến nội dung của tệp (ví dụ: "loại" được liên kết với nội dung của tệp). Tôi đang sử dụng MVC Controller mùa xuân sử dụng Spring 4.Tôi có thể trộn các loại phương tiện trong phương thức Spring Rest không?
Đây là một ví dụ về những gì tôi muốn làm:
@RequestMapping(value = "/file", method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<MyFileDTO> uploadCustomAnnotationFile(
@RequestParam("file") MultipartFile uploadFile,
@RequestBody MyFileDetailsDTO fileDetails) {
log.debug("This is working!");
}
Tuy nhiên, nếu tôi cố gắng để gọi phương pháp này qua Swagger UI, tôi nhận được một ngoại lệ loại phương tiện không được hỗ trợ:
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarycAbgNBTQ09GQTBif' not supported
Tôi nghi ngờ rằng tôi không thể trộn ứng dụng/json và dữ liệu đa dạng/biểu mẫu trong 1 yêu cầu?
CẬP NHẬT: Dựa trên phản hồi của zeroflagL và theo liên kết được cung cấp đến tài liệu cụ thể cho những gì tôi đang cố gắng thực hiện và sử dụng @RequestPart thay vì @RequestBody, tôi đã thực hiện một lượng nhỏ tiến bộ, nhưng điều này vẫn không hoạt động.
mới phương pháp chữ ký:
@RequestMapping(value = "/file", method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<MyFileDTO> uploadCustomAnnotationFile(
@RequestPart MultipartFile uploadFile,
@RequestPart MyFileDetailsDTO fileDetails) {
log.debug("This is working!");
}
mới ngoại lệ:
2014-12-11 09:21:45.237 [http-nio-8443-exec-8] ERROR c.i.h.c.ControllerExceptionHandler [ControllerExceptionHandler.groovy:58] - Controller Exception
org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'fileDetails' is not present.
Cảm ơn trước, Tonya
Lưu ý rằng 'HttpMediaTypeNotSupportedException' cũng có thể được ném nếu lớp @Controller của bạn khai báo định dạng điểm cuối sai trong thuộc tính' consumes' của '@ RequestMapping', ví dụ nếu bạn khai báo' consumes = {"application/json"} 'ở cấp lớp, nhưng sau đó có điểm cuối cần sử dụng" multipart/form-data ". – lanoxx