gpt4 book ai didi

java - 如何在 jersey web 服务中从 android 读取多部分实体

转载 作者:行者123 更新时间:2023-11-30 02:27:14 29 4
gpt4 key购买 nike

我正在从 android 客户端获取多部分实体,如下所示。

       HttpClient httpClient = new DefaultHttpClient();

HttpPost postRequest = new HttpPost(
"http://localhost:9090/MBC_WS/rest/network/mobileUserPictureInsert1");


MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("message", new StringBody("hi moni"));

postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);

在泽西,我试图检索消息但只得到对象。代码是:

 @Path("/mobileUserPictureInsert1")
@POST
@Consumes("multipart/*")

public String create(MultiPart multiPart){
BodyPartEntity bpe = (BodyPartEntity) multiPart.getBodyParts().get(0).getEntity();
String message = bpe.toString();

我在这里得到一些对象,而不是消息值。我犯了什么错误。请帮助我。

最佳答案

是的,正确的结果。 toString() 将只使用 Object.toString() , 这将导致

 getClass().getName() + '@' + Integer.toHexString(hashCode())

这很可能是您所看到的。除非BodyEntityPart覆盖 toString(),但它没有。您应该改为使用 BodyEntityPart.getInputStream() 获取 InputStream .然后你可以用 InputStream 做任何事情。

一个简单的例子:

@POST
@Consumes("multipart/*")
public String create(MultiPart multiPart) throws Exception {
String message;
try (BodyPartEntity bpe
= (BodyPartEntity) multiPart.getBodyParts().get(0).getEntity()) {
message = getString(bpe.getInputStream());
}
return message;
}

private String getString(InputStream is) throws Exception {
StringBuilder builder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
String line;
while((line = reader.readLine()) != null) {
builder.append(line).append("\n");
}
}
return builder.toString();
}

另一个注意事项:您已经在使用 Jersey 多部分支持,您可以让生活更轻松,只需使用它的注释支持。例如,你可以这样做

@POST
@Consumes("multipart/*")
public String create(@FormDataParam("message") String message){
return message;
}

这就容易多了。 @FormDataParam("message") 获取您在此处定义的正文名称:

reqEntity.addPart("message", new StringBody("hi moni"));

并转换为字符串。只要正文部分的 Content-Type 有可用的 MessageBodyReader,就应该能够自动转换。

关于java - 如何在 jersey web 服务中从 android 读取多部分实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27778900/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com