我正在尝试创建一个REST服务,它将 JSON 作为POST
方法中的输入。然后,该服务将其存储在DB中并返回响应。我在此question中创建了一个名为 jsonFormat 的类。这个类的代码 -
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author Aj
* This class forms the format of the JSON request which will be recieved from the App
*/
@XmlRootElement
public class JsonFormat {
public double longitude;
public double latitude;
public long IMSI;
public JsonFormat(){}
public JsonFormat(double longitude,double latitude, long IMSI){
this.longitude = longitude;
this.latitude = latitude;
this.IMSI = IMSI;
}
}
但是,我仍然收到不支持的媒体类型HTTP 415 响应。
我正在使用POSTMAN add on chrome进行测试。
这是我的服务实现代码 -
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 javax.ws.rs.POST;
import org.json.simple.JSONObject;
/**
* REST Web Service
*
* @author Aj
*/
@Path("Offers")
public class OffersResource {
@Context
private UriInfo context;
/**
* Creates a new instance of OffersResource
*/
public OffersResource() {
}
@Path("/storeMovement")
@POST
@Consumes("application/json")
@Produces("application/json")
public String storeTrace(JsonFormat jsonObj) {
JSONObject response = new JSONObject();
String ret = "";
try {
RecordMovement re = new RecordMovement(jsonObj.longitude, jsonObj.latitude, jsonObj.IMSI);
ret = re.Store();
// Clear object
re = null;
System.gc();
response.put("status", ret);
} catch (Exception e) {
response.put("status", "fail");
}
return response.toJSONString();
}
/**
* PUT method for updating or creating an instance of OffersResource
*
* @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) {
}
}
我传递的JSON是 -
{"longitude": "77.681307",
"latitude": "12.8250278",
"IMSI": "404490585029957"}
在提交请求时,我确保将类型设置为POST
且网址正确(http://localhost:8080/Offers/webresources/Offers/storeMovement
)。
有人可以看看并告知我做错了什么吗?我经历过多个网站,其中错误主要是由于没有设置内容类型,但这显然不是这里的情况!
答案 0 :(得分:0)
解决。
我从使用模型变为字符串变量。然后,我使用JSONParser
来解析作为参数接收的json
字符串,然后将其类型转换为JSONObject
。这是我修改过的代码 -
@Path("/storeMovement")
@POST
@Consumes("application/json")
@Produces("application/json")
public String storeTrace(String json) {
JSONObject response = new JSONObject();
JSONParser parser = new JSONParser();
String ret = "";
try {
Object obj = parser.parse(json);
JSONObject jsonObj = (JSONObject) obj;
RecordMovement re = new RecordMovement((double) jsonObj.get("longitude"), (double) jsonObj.get("latitude"), (long) jsonObj.get("IMSI"));
ret = re.Store();
// Clear object
re = null;
System.gc();
response.put("status", ret);
} catch (Exception e) {
response.put("status", "fail " + e.toString());
}
return response.toJSONString();
}