1

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をnullとして受け取ります.@FormParamを使ってみました. しかし、それは機能していないようです。

誰か助けてくれませんか?

4

1 に答える 1

0

パスパラメータ(@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);
}

rideidマップされ5ます。の値は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());
}
于 2013-02-19T19:09:01.710 に答える