使用 Quarkus 和 RestEasy 上传多个文件

问题描述

我正在尝试设置一个端点,该端点允许上传多个文件以及其他表单数据。将此视为创建产品页面,您将在其中拥有几张产品图片和其他信息。理想情况下,我想将请求映射到 POJO

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
@Path("/product/create")
public Response createProduct(@MultipartForm CreateProductRequest req)  {

还有 POJO:

@Data
public class CreateProductRequest {

@FormParam("name")
private String name;

@FormParam("description")
private String description;

@FormParam("tags")
private List<String> tags; 

@FormParam("img")
@PartType(MediaType.APPLICATION_OCTET_STREAM)
private List<InputStream> img; //Ideally I Could use an object such as multipartfile 
                               //that would give me access to the filename and MIME type

}

但这不起作用,我明白了:

java.lang.RuntimeException: RESTEASY007545: Unable to find a MessageBodyReader for media type:
image&#x2F;jpeg;charset=UTF-8 and class type java.util.List

如果我删除 List,它工作正常。

它似乎与 List<String> tags

有同样的问题

抛出:

java.lang.RuntimeException: RESTEASY007545: Unable to find a MessageBodyReader for media 
type: text&#x2F;plain;charset=UTF-8 and class type java.util.List

我已经看到使用 MultipartFormDataInput解决方法,但我真的很想避免这种情况,因为请求 obj 非常大,并且手动映射它会非常繁琐且容易出错。

我正在运行 Java 11,Quarkus 1.11.1.Final

非常感谢!

解决方法

带有 @MultipartForm 注释的 POJO 不支持使用带有 List 的文件