gpt4 book ai didi

java - Web 服务的 JSON 参数

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:45:40 24 4
gpt4 key购买 nike

我正在尝试创建一个 web 服务,它将接受 JSON 响应,然后用它查询数据库以返回商店详细信息(JSON 响应).

我打算稍后将其与移动应用一起使用。但在开发过程中,我正在使用 AJAX 调用 进行测试。我现在正在使用 @GET 请求。我能够成功返回 JSON 响应。我现在面临将 JSON 对象 传递给 @GET 方法 的问题。在调试时,我发现我的输入参数中有一个空值。有人可以看看我的代码并告诉我做错了什么吗?

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;
}
}

就其值(value)而言,我正在使用 JSON.Simple 库

最佳答案

假设你的input参数是GET请求的查询参数,那么你需要给参数添加@QueryParam注解:

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

编辑:

但是,就像@troylshields 提到的那样,如果您尝试发送 JSON 对象,则必须使用 POST 或 PUT(视情况而定)。 GET 请求只支持查询参数,尝试通过查询参数发送 JSON 字符串不是一个好主意。

关于java - Web 服务的 JSON 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25599720/

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