我正在尝试将图像数据发布到 seam+RESTeasy 端点,并且在 JBoss 启动期间遇到了一个非常神秘的错误。我发送的 HTTP 请求的内容类型为 multipart/form-data,它有一个名为“附件”的图像/jpeg 部分。我的服务方法如下所示:
@POST
@Path("uploadSymptomsImage/{appointmentGUID}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("application/json")
public String uploadSymptomsImage( @FormParam("attachment") InputStream fileInputStream,
@PathParam("appointmentGUID") String strAppointmentGUID )
{ ...
我得到的错误是在启动期间:
Caused by: java.lang.RuntimeException: Unable to find a constructor that takes a String param or a valueOf() or fromString() method for javax.ws.rs.FormParam("attachment") on public java.lang.String com....AppointmentRestService.uploadSymptomsImage(java.io.InputStream,java.lang.String) for basetype: java.io.InputStream
at org.jboss.resteasy.core.StringParameterInjector.initialize(StringParameterInjector.java:206) [:]
at org.jboss.resteasy.core.StringParameterInjector.<init>(StringParameterInjector.java:57) [:]
at org.jboss.resteasy.core.FormParamInjector.<init>(FormParamInjector.java:22) [:]
我的理解是媒体类型可以自动编组到 InputStream。我也尝试过 java.io.File、java.io.Reader - 两者都有相同的错误。当我用 byte[] 或 String 替换时,我得到一个零长度数组,或者 null 作为参数值。
你将如何调试这个?此外,是否可以访问原始请求或预编组值?
这里的任何建议将不胜感激。