我正在尝试从我的Android应用程序向REST WebService发送一些简单的字符串。但是,在我的WebService中,我总是收到一个空值。 [编辑]我正在使用Multipart,因为我还希望将来能够发送图像和字符串。
这是我的android代码:
HttpPost httppost = new HttpPost(url);
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
entityBuilder.addTextBody("email", "teste");
entityBuilder.addTextBody("password", "123");
httppost.setEntity(entityBuilder.build());
response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if(statusCode == HttpStatus.SC_OK) {
Toast.makeText(mContext, "=]", Toast.LENGTH_SHORT).show(); //This line is executed
} else {
Toast.makeText(mContext, "=[", Toast.LENGTH_SHORT).show();
}
这是我的网络服务代码:
@POST
@Path("/cadastrarUsuario")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public UsuarioVO postUsuario(@PathParam("email") final String email) {
System.out.println("E-mail: " + email);
return usuario;
}
我总是收到电子邮件为null。我想@PathParam或@FormParam在这里不会真正起作用。但接受参数的正确方法是什么?
答案 0 :(得分:0)
Multipart更适合文件上传。在您的情况下,轻量级表单提交是合适的。然后身体包含例如email=teste&pwd=123
,Content-Type
为application/x-www-form-urlencoded
。
您应该知道it's not recommended在Android> = GINGERBREAD中使用HttpClient
。首选是HttpURLConnection
。
由于HttpURLConnection的界面不易使用,因此有一些包装库可以让生活更轻松。 Here is a list。如果您选择我提供的库(使用非常自由的MIT-License),您可以像这样创建REST请求:
Webb webb = Webb.create();
webb.setBaseUri("http://myserver/app-path");
Response<String> response = webb
.post("/cadastrarUsuario")
.param("email", "teste")
.param("pwd", "123")
.asString();
if (response.isSuccess()) {
Log.i(TAG, "response: " + response.getBody());
} else {
Log.w(TAG, "HTTP-Code: " + response.getStatusCode());
}
您可以接收其他类型,例如JSONObject
或byte[]
。在这个例子中,我们期望一个简单的String。
您的Java REST资源应该略有不同:
@POST
@Path("/cadastrarUsuario")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED) // <--
@Produces(MediaType.APPLICATION_JSON)
public UsuarioVO postUsuario(@FormParam("email") final String email,
@FormParam("pwd") final String pwd) {
System.out.println("E-mail: " + email);
return usuario;
}