不支持的媒体类型 - REST服务

时间:2014-10-15 13:59:51

标签: java json web-services rest

我正在尝试创建一个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)。

有人可以看看并告知我做错了什么吗?我经历过多个网站,其中错误主要是由于没有设置内容类型,但这显然不是这里的情况!

1 个答案:

答案 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();
}