Java 使用从发送的Jersey接收JSON变量,使用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

我有一个使用HttpPost发送数据的Android代码:

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中提取的。例如,使用URL
http://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这样的包装类并完成它。谢谢