泽西岛 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()));
}
与其他字段类似,您也可以检索值。
我正在尝试使用 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()));
}
与其他字段类似,您也可以检索值。