当前位置: 首页 > 知识库问答 >
问题:

Jersey MultiPartRequest接收空

卓学智
2023-03-14

我正在尝试使用多部分实体构建器从客户端构建多部分请求:

MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            builder.addTextBody(MULTIPART_ID,
                    id,ContentType.TEXT_PLAIN);
            builder.addTextBody(DOCT, doc,ContentType.TEXT_PLAIN);
            final InputStreamBody fileBody = new InputStreamBody(cachedStream,
                    ContentType.create(MediaType.APPLICATION_OCTET_STREAM));
            builder.addPart(CONTENT_PART, fileBody);
            builder.addTextBody(OVERWRIT_PERMIT, String.valueOf(preventOverWrite),ContentType.TEXT_PLAIN);


            final HttpPut putMethod= new HttpPut(url);
        //    putMethod.setHeader("content-type", "multipart/form-data"
            putMethod.setEntity(builder.build());
            final CloseableHttpResponse response = httpClient.execute(storeMethod);

读取此内容的资源类如下:

@Path("/somePath")
    @PUT
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response uploadFunction(@FormDataParam(value="id")  String id, @FormDataParam(value="doc") String doc,@FormDataParam(value="content") InputStream content,
                                        @FormDataParam(value="overwrite") Boolean flag) throws SomeException {

我用的是带球衣2的Spring靴。在这一步,当我试图读取其中任何一个参数时,所有这些参数都是空值。因此响应得到一个内部服务器错误。

我还补充道:

register(MultiPartFeature.class);

客户端和服务器应用程序。

此外,还添加了依赖项

<dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <scope>compile</scope>
        </dependency>

有人可以指出我错过了什么吗?我是否需要为服务器创建一个对象,而不是使用@FormDataParam?我已经使用多部分正确搜索了很多,但我还不能修复它。

共有1个答案

施锋
2023-03-14

我在使用解码器后修复了这个问题。还需要代表的DTOobject.So上述资源类已更新为

@Path("/somePath")
    @PUT
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces(MediaType.APPLICATION_OCTET_STREAM)
    public Response uploadFunction(FormDataMultiPart input){
    Map<String, List<FormDataBodyPart>> bodyParts = input.getFields();
    bodyParts.get("id").stream().findFirst().ifPresent(id-> dtoObject.setId(id.getValue()));
    }

同样,对于其他字段,您也可以检索该值。

 类似资料:
  • 问题内容: 对于我来说,目前尚不清楚,在这种情况下,我想使用值接收器而不是始终使用指针接收器。 回顾一下文档: 该 文档 还说:“对于基本类型,切片和小型结构之类的类型,值接收器非常便宜,因此,除非该方法的语义要求使用指针,否则值接收器是高效且清晰的。” 首先, 它说“非常便宜”,但问题是它比指针接收器便宜。因此,我做了一个小的基准测试(基于要点的代码),向我展示了,即使对于只有一个字符串字段的结

  • 问题内容: 进行请求时是否可以接收由远程服务器设置的cookie ? 我需要php来执行http请求,存储cookie,然后使用存储的cookie进行第二个http请求。 问题答案: 您应该为此目的使用实现名为cookie jar的功能,该功能允许将cookie保存在文件中,并将其重新用于后续请求。 这里有一个简短的代码片段,介绍了如何实现: 注意 :必须注意,您应该已安装pecl扩展名(或用PH

  • 解析请求中的Body需要注意Transfer-Encoding头。 当Transfer-Encoding的值为chunked时,不应该使用Content-Length去读取Body。 chunked的Body格式为: 数据以一系列分块的形式进行发送。 Content-Length 首部在这种情况下不被发送。。在每一个分块的开头需要添加当前分块的长度,以十六进制的形式表示,后面紧跟着 ' \r\n

  • 从Queue中接收message 方法参数ReceiveMessageRequest queueName : String : required tagName : String : optional 指定接收请求对应的Tag 如果此值未设置,即从Queue的默认Tag接收 maxReceiveMessageNumber : int : optional 接收到的message的最大数量 当Que

  • 我已经在创建服务方法上注册了接收者,并在销毁方法上取消注册?它工作得很好,但在某些三星Galaxy s3上,即使我停止服务,我仍然会收到接收器。如何找到解决办法?有可能吗?请帮帮我.提前致谢 }

  • 通知广播接收机: 谁能帮帮我吗?我不知道我做错了什么