【问题标题】:Resteasy Client Byte Array Null on Server服务器上的 Resteasy 客户端字节数组 Null
【发布时间】:2013-11-18 19:35:46
【问题描述】:

我正在尝试将一个字节数组从我的 resteasy 客户端发送到另一个服务(也是 resteasy),但我的字节数组在服务器上始终为空。

Resteasy:2.3.6.Final

是的,我在我的类路径中包含了 resteasy-multipart-provider jar。

服务器代码:

public class PhotoServiceInputBean {
    private byte[] photo;

    public byte[] getPhoto() {
        return photo;
    }

    @FormParam("photo")
    @PartType("application/octet-stream")
    public void setPhoto(byte[] data) {
        this.photo = data;
    }
}

@Adapter
@Path("/")
public class PhotoServiceAdapter {

    @POST
    @Path("/services/{id}/photos")
    @Consumes("multipart/form-data")
    @Produces(value = {MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN})
    public Response createPhoto(@PathParam("id") Long id, @MultipartForm PhotoServiceInputBean inputBean) {
        System.out.println(inputBean.getPhoto());
    }
}

我的客户代码如下:

@Path("/services/{id}/photos")
public interface CreatePhotoProxy {

    @POST
    @Consumes("multipart/form-data")
    @Produces(value = {MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN})
    public ClientResponse<PhotoServiceOutputBean> createPhoto(@PathParam("id") Long id, @MultipartForm PhotoServiceInputBean inputBean);

}

这就是我所说的:

public void uploadPhoto() {
    byte[] imageData = getImageData();
    CreatePhotoProxy createPhotoProxy = ProxyFactory.create(CreatePhotoProxy.class, baseUrl);
    PhotoServiceInputBean photoServiceInputBean = new PhotoServiceInputBean();
    photoServiceInputBean.setPhoto(imageData);
    response = createPhotoProxy.createPhoto(listingId, photoServiceInputBean);
}

根据 org.apache.http 调试日志(40 字节),我请求的内容长度最终非常小,即使 gzip 压缩对于我正在上传的图像而言显然太小了(imageData.length 约为 50k我正在运行的测试)。

我尝试过手动注册各种提供程序,但我觉得它们应该是内置的,但无论如何我都没有成功。感谢所有帮助。

谢谢!

【问题讨论】:

    标签: java file-upload jax-rs resteasy multipartform-data


    【解决方案1】:

    在对 resteasy 核心代码进行大量调试后,我发现了问题并纠正了它。当您的 @MultipartForm bean 将注释放在 getter 而不是属性本身上时,似乎存在一个错误,这会导致 http 请求无法正确构建。我相信无论您使用的是ApacheHttpClient4Executor 还是URLConnectionClientExecutor,都会发生这种情况

    我修改后的 bean 看起来像这样,现在可以正常工作:

    public class PhotoServiceInputBean {
        @FormParam("photo")
        @PartType("application/octet-stream")
        private byte[] photo;
    
        public byte[] getPhoto() {
            return photo;
        }
    
        public void setPhoto(byte[] data) {
            this.photo = data;
        }
    }
    

    这很难追踪,希望这对遇到此问题的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多