Java 使用从发送的Jersey接收JSON变量,使用HttpPost接收Android设备
我有一个使用HttpPost发送数据的Android代码:Java 使用从发送的Jersey接收JSON变量,使用HttpPost接收Android设备,java,android,rest,jersey,Java,Android,Rest,Jersey,我有一个使用HttpPost发送数据的Android代码: public static void sendRideIdAndEmail(String rideId,String email){ HttpClient client = new DefaultHttpClient(); HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit HttpRespon
public static void sendRideIdAndEmail(String rideId,String email){
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
HttpResponse response;
JSONObject json = new JSONObject();
try {
HttpPost post = new HttpPost("http://192.168.1.59/FareShareREST/api/rides/joinRide");
json.put("rideid", rideId);
json.put("emailid", email);
Log.v("RideEmailJson",json.toString());
StringEntity se = new StringEntity( json.toString());
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);
response = client.execute(post);
/*Checking response */
if(response!=null){
InputStream in = response.getEntity().getContent(); //Get the data in the entity
}
} catch(Exception e) {
e.printStackTrace();
Log.v("Error", "Cannot Estabilish Connection");
}
}
我在Tomcat 7的服务器端运行了一个RestFul Post方法:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("joinRide")
public Response joinRide(@PathParam("rideid") long rideid,@PathParam("emailid") String emailid) {
System.out.println(emailid);
Ride ride=rideRepository.getRideById(rideid);
UserDetail userDetail=userRepository.getUserDetailbyEmailId(emailid);
User user=new User();
user.setName(userDetail.getName());
user.setRegistrationId(userDetail.getRegistrationId());
rideRepository.addUserToRide(ride, user);
return Response.ok().build();
}
但我收到的电子邮件id总是空的。我尝试过使用@FormParam。但这似乎不起作用
有人能为我提供帮助吗?路径参数(@PathParam
)是从传入请求URL中提取的。例如,使用URLhttp://192.168.1.59/FareShareREST/api/rides/joinRide/5
和以下代码:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/joinRide/{rideid}")
public Response joinRide(@PathParam("rideid") long rideid) {
System.out.println(rideid);
}
您将得到映射到5
的rideid
。5
的值来自映射的URL部分(/joinRide/{id}
)但是,这对您的场景没有用处-您正在创建一个JSON对象并将其包含在请求主体中。在这个场景中,在服务器端,JAX-RS提供者将把这个请求体映射到资源方法上的第一个合格参数。您需要类似于以下内容的代码:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/joinRide")
public Response joinRide(String json) {
System.out.println(json);
}
这将直接将JSON字符串设置到名为JSON
的变量中。当然,您需要解析JSON以获取其中的数据,这可能是您不想做的。在本例中,创建一个包含预期数据字段的简单POJO,并在资源方法中使用它:
public class EmailInfo implements Serializable {
private String rideId;
private String email;
// Constructors, Getters/Setters
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Path("/joinRide")
public Response joinRide(EmailInfo info) {
System.out.println(info.getRideId());
System.out.println(info.getEmail());
}
非常感谢。但我只想在POST中传递可以在服务器端接收的变量。我知道有什么办法好的,所以你的服务器端是固定的,但是你可以更改客户端?我只想发布我的android应用程序中的变量。这样就可以在服务器上接收了对不起,我没有听你的。如果无法更改服务器端,则需要将您试图传递的变量附加到URL(例如:)。请注意,由于URL中的电子邮件地址,您必须对其进行编码。另一方面,如果您可以更改服务器端,请检查我的答案并修改代码以匹配。Ok。然后我会制作一个像EmailInfo这样的包装类并完成它。谢谢