3

を作成して、web serviceそれをJSON response使用して DB にクエリを実行し、 store details を返し(JSON response)ます。

mobile appこれを後で使用するつもりです。しかし、開発中はAJAX calls. 私は@GET現在リクエストを使用しています。JSON レスポンスを正常に返すことができました。私は今、 を に渡す際に問題に直面しJSON Objectてい@GET methodます。デバッグ時に、入力パラメーターに null 値があることがわかりました。誰かが私のコードを見て、私が間違っていることをアドバイスできますか?

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;

import java.util.Iterator;

import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.JSONValue;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

/**
 * REST Web Service
 *
 * @author Aj
 *
 * This service will return the offers valid for the IMSI number passed
*/
@Path("getOffers")
public class GetOffersResource {

    @Context
    private UriInfo context;

    /**
    * Creates a new instance of GetOffersResource
     */
    public GetOffersResource() {
    }

    @GET
    @Consumes("application/json")
    @Produces("application/json")
    public String getJson(final String input) {

        JSONParser parser = new JSONParser();
        String[] response = new String[5];

        try {
            Object obj = parser.parse(input);
            JSONObject jsonObject = (JSONObject) obj;
            offerProcess ofc = new offerProcess();
            ofc.setLatitude((double) jsonObject.get("latitude"));
            ofc.setLongitude((double) jsonObject.get("longitude"));
            ofc.setIMSI((long) jsonObject.get("IMSI"));

            response = ofc.fetchOffers();

        } catch (ParseException e) {
            JSONObject ser = new JSONObject();

            ser.put("status", "error");
            ser.put("reason", "Bad request");

            return ser.toJSONString();
        }

        //TODO return proper representation object
        JSONObject ser = new JSONObject();
        JSONArray arr = new JSONArray();

        arr.add("456TYU");
        arr.add("OLED TV");
        arr.add("24-JUL-2014");
        arr.add("XYZ Enterprises");
        arr.add("Gachibowli");
        arr.add("9911278366");

        ser.put("status", "success");
        ser.put("Offers", arr);

        System.out.println(ser);

        return ser.toJSONString();
    }

    /**
     * PUT method for updating or creating an instance of GetOffersResource
     *
     * @param content representation for the resource
     * @return an HTTP response with content of the updated or created resource.
     */
    @PUT
    @Consumes("application/json")
    public void putJson(String content) {
    }
}

これがofferProcessクラスです -

public class offerProcess {

    private double longitude;
    private double latitude;
    private long IMSI;

    public double getLongitude() {
        return longitude;
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public long getIMSI() {
        return IMSI;
    }

    public void setIMSI(long IMSI) {
        this.IMSI = IMSI;
    }

    public String[] fetchOffers(){
        String[] response = new String[5];

        response[0] = "456TYU";
        response[1] = "OLED TV";
        response[2] = "24-JUL-2014";
        response[3] = "XYZ Enterprises";
        response[4] = "Gachibowli";
        response[5] = "9980556990";

        return response;
    }
}

価値があるので、私はJSON.Simple ライブラリを使用しています。

4

4 に答える 4

4

inputパラメータが GET リクエストのクエリ パラメータであると仮定すると@QueryParam、パラメータに注釈を追加する必要があります。

    @GET
    @Consumes("application/json")
    @Produces("application/json")
    public String getJson(@QueryParam("input") final String input) {
          ...
    }

編集:

ただし、@troylshields が言及したように、JSON オブジェクトを送信しようとしている場合は、POST または PUT を使用する必要があります (状況によって異なります)。GET リクエストはクエリ パラメータのみをサポートしており、クエリ パラメータを介して JSON 文字列を送信しようとすることはお勧めできません。

于 2014-09-01T06:51:30.430 に答える
1

POST に変更してみてください。GET 要求で JSON 本文をサーバーに渡しません。

于 2014-09-01T06:47:24.713 に答える
0

クライアント コードが正しくありません。次のようにリクエストを送信する必要があります

var requestData = {"longitude" : "77.681307",  "latitude"  : "12.8250278", "IMSI": "404490585029957"};    
// ...  
$.ajax({
// ...
   data: {input : requestData}  // 'input' should be the root element  
// ...
)}; 

この場合、サーバー部分のinput文字列は正しくなります。

また、あなたPOSTがリクエストを送信しているのを見ているようですが、GETリクエストはサーバー側で期待されています

于 2014-09-01T09:15:09.373 に答える