泽西岛 MultiPartRequest 接收空

Jersey MultiPartRequest receiving null

我正在尝试使用 MultipartEntitybuilder 从客户端构建一个多部分请求:

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);

阅读本文的资源Class如下:

@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 {

我正在使用 spring 引导程序和 Jersey2。在这一步,当我尝试读取其中任何一个时,我得到所有这些参数的空值。因此响应会出​​现内部服务器错误。

我也补充了:

register(MultiPartFeature.class);

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

此外还添加了依赖项

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

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

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

@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()));
    }

与其他字段类似,您也可以检索值。