gpt4 book ai didi

java - 使用 Jersey 接收从 Android 设备发送的 JSON 变量(使用 HttpPost)

转载 作者:行者123 更新时间:2023-12-01 04:50:57 24 4
gpt4 key购买 nike

我有一个使用 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();
}

但我总是收到 null 的电子邮件 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);
}

您将得到映射到 5rideid5 的值来自已映射的 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());
}

关于java - 使用 Jersey 接收从 Android 设备发送的 JSON 变量(使用 HttpPost),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14965264/

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