Không thể triển khai tệp tải lên đơn giản bằng Jersey. Thiếu các lỗi phụ thuộc được nêu tại bootstrap ứng dụng:Không thể triển khai tệp tải lên đơn giản ở Jersey - "được chú thích bằng POST tài nguyên, lớp không được công nhận là phương thức tài nguyên hợp lệ. Không có"
The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 0
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.foo.MyResource.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition) at parameter at index 1
SEVERE: Method, public javax.ws.rs.core.Response com.foo.uploadFile(java.io.InputStream,com.sun.jersey.core.header.FormDataContentDisposition), annotated with POST of resource, class com.foo.FS2Resource, is not recognized as valid resource method.
unavailable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
Có vẻ như có vấn đề với ánh xạ tham số đầu vào cho dịch vụ REST? Tôi đã đọc tài liệu và làm theo một số ví dụ, và tôi không bị lệch khỏi những ví dụ đó.
Dưới đây là các mã:
@Path("v1/")
public class FileUploadResource {
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON})
public Response uploadFile(
@FormDataParam("file") InputStream is,
@FormDataParam("file") FormDataContentDisposition detail) {
String name = detail.getFileName();
// do upload stuff
String output = ....
return Response.status(200).entity(output).build();
}
}
tôi kéo vào "biên dịch 'com.sun.jersey.contribs: jersey-nhiều phần dữ liệu: 1.17.1'" cho FormDataParams.
EDIT: Tôi đã có thể để có được nó làm việc trong Jersey nhưng chỉ trong này thời trang nguyên thủy hơn:
@POST
@Path("upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response uploadFile(final MimeMultipart file) {
if (file == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("Must supply a valid file").build();
try {
for (int i = 0; i < file.getCount(); i++) {
// ... do something with file.getBodyPart(i));
}
return Response.ok("done").build();
} catch (final Exception e) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e).build();
}
}
Đây có lẽ là một cách giải quyết đầy đủ, nhưng vẫn muốn có được để dưới cùng của vấn đề.
Tôi đang thực sự chạy vào một vấn đề tương tự. Tôi có cùng phiên bản tương ứng của tất cả các lọ áo yêu cầu, và mỗi giá trị FormDataParam của tôi khác nhau để tránh vấn đề lập bản đồ trong tương lai. Tuy nhiên, tôi vẫn còn có vấn đề bootstrap là tốt. Có vấn đề với việc sử dụng chú thích Đăng và Sản xuất cùng nhau hay gì đó không? Phương pháp duy nhất tôi gặp rắc rối này là bài đăng của tôi. –
Nó đã được đề cập đến với tôi bởi một đồng nghiệp rằng đây là một lỗi đã biết và rằng lý do nó làm việc cho một số là nó phải làm với phân phối/cấu hình cụ thể mà bạn đang làm việc với. –
Một lỗi về chính xác những gì? Chú thích FormDataParam hoặc Jersey? –