Grails JAX-RS REST 分段文件上传
Grails JAX-RS REST multipart file upload
尝试让分段文件上传在 Grails 2.5.4 资源中工作。
我真的很想使用 Spring 开箱即用的多部分功能,但我找不到适合我的特定情况的示例。
我正在从 Postman 呼叫 API。 Body 和 form-data
以及 file
字段中附加的单个 PDF 文件。没有其他 headers!
第一次尝试
@POST
@Path("/pdf")
Response createPdf(MultipartFile file)
在 Postman 中返回 415 Unsuported Media Type
,在服务器上返回:
[...] ERROR container.ContainerRequest - A message body reader for Java class org.springframework.web.multipart.MultipartHttpServletRequest [...]
The registered message body readers compatible with the MIME media type are:
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
添加 @Consumes(MediaType.MULTIPART_FORM_DATA)
没有帮助。
我尝试了其他参数,例如MultipartHttpServletRequest
,但仍然没有消息body reader。
第二次尝试
@POST
@Path("/pdf")
@Consumes(MediaType.MULTIPART_FORM_DATA)
Response createPdf(@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail)
返回 500 错误,并且在服务器上:
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.carfax.VehicleReceiptPhotoResource.createPdf(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at parameter at index 0
SEVERE: Missing dependency for method public javax.ws.rs.core.Response createPdf(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at parameter at index 1
SEVERE: Method, public javax.ws.rs.core.Response createPdf(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), annotated with POST of resource, class com.carfax.VehicleReceiptPhotoResource, is not recognized as valid resource method.
具有这些依赖关系
compile group: 'com.sun.jersey', name: 'jersey-bundle', version: '1.19.4'
compile group: 'com.sun.jersey', name: 'jersey-json', version: '1.19.4'
compile "javax.ws.rs:javax.ws.rs-api:2.1@jar"
compile ('org.glassfish.jersey.media:jersey-media-multipart:2.27') {
exclude group:'javax.ws.rs'
}
compile group: 'org.jvnet.mimepull', name: 'mimepull', version: '1.9.11'
第三次尝试
@POST
@Path("/pdf")
Response createPdf(@FormDataParam("file") InputStream fileInputStream)
使用与第二次尝试相同的球衣依赖性,这可行,但对我来说还不够好。我想一次上传多个文件,并获得一些额外的 json 信息。
我想要的
- Grails 中有多少种多文件上传方法的一些说明
- 有哪些不同的库实现了这一点
- 在 Grails REST 资源中执行此操作,而不是在控制器中
我浏览过的一些链接
- Jersey Exception : SEVERE: A message body reader for Java class
- https://groups.google.com/forum/#!topic/dropwizard-user/moYQOtxXnRU
- Maven jersey-multipart missing dependency for javax.ws.rs.core.Response
- https://philsturgeon.uk/api/2016/01/04/http-rest-api-file-uploads/
- https://www.javatpoint.com/jax-rs-file-upload-example
*根据Paul Samsotha的评论
You're trying to mix Jersey 2.x multipart support with a Jersey 1.x application. This isn't going to work. You need to use the 1.x multipart. Get rid of the 2.x one.
尝试让分段文件上传在 Grails 2.5.4 资源中工作。
我真的很想使用 Spring 开箱即用的多部分功能,但我找不到适合我的特定情况的示例。
我正在从 Postman 呼叫 API。 Body 和 form-data
以及 file
字段中附加的单个 PDF 文件。没有其他 headers!
第一次尝试
@POST
@Path("/pdf")
Response createPdf(MultipartFile file)
在 Postman 中返回 415 Unsuported Media Type
,在服务器上返回:
[...] ERROR container.ContainerRequest - A message body reader for Java class org.springframework.web.multipart.MultipartHttpServletRequest [...]
The registered message body readers compatible with the MIME media type are:
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
添加 @Consumes(MediaType.MULTIPART_FORM_DATA)
没有帮助。
我尝试了其他参数,例如MultipartHttpServletRequest
,但仍然没有消息body reader。
第二次尝试
@POST
@Path("/pdf")
@Consumes(MediaType.MULTIPART_FORM_DATA)
Response createPdf(@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail)
返回 500 错误,并且在服务器上:
SEVERE: Missing dependency for method public javax.ws.rs.core.Response com.carfax.VehicleReceiptPhotoResource.createPdf(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at parameter at index 0
SEVERE: Missing dependency for method public javax.ws.rs.core.Response createPdf(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at parameter at index 1
SEVERE: Method, public javax.ws.rs.core.Response createPdf(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition), annotated with POST of resource, class com.carfax.VehicleReceiptPhotoResource, is not recognized as valid resource method.
具有这些依赖关系
compile group: 'com.sun.jersey', name: 'jersey-bundle', version: '1.19.4'
compile group: 'com.sun.jersey', name: 'jersey-json', version: '1.19.4'
compile "javax.ws.rs:javax.ws.rs-api:2.1@jar"
compile ('org.glassfish.jersey.media:jersey-media-multipart:2.27') {
exclude group:'javax.ws.rs'
}
compile group: 'org.jvnet.mimepull', name: 'mimepull', version: '1.9.11'
第三次尝试
@POST
@Path("/pdf")
Response createPdf(@FormDataParam("file") InputStream fileInputStream)
使用与第二次尝试相同的球衣依赖性,这可行,但对我来说还不够好。我想一次上传多个文件,并获得一些额外的 json 信息。
我想要的
- Grails 中有多少种多文件上传方法的一些说明
- 有哪些不同的库实现了这一点
- 在 Grails REST 资源中执行此操作,而不是在控制器中
我浏览过的一些链接
- Jersey Exception : SEVERE: A message body reader for Java class
- https://groups.google.com/forum/#!topic/dropwizard-user/moYQOtxXnRU
- Maven jersey-multipart missing dependency for javax.ws.rs.core.Response
- https://philsturgeon.uk/api/2016/01/04/http-rest-api-file-uploads/
- https://www.javatpoint.com/jax-rs-file-upload-example
*根据Paul Samsotha的评论
You're trying to mix Jersey 2.x multipart support with a Jersey 1.x application. This isn't going to work. You need to use the 1.x multipart. Get rid of the 2.x one.