400错误请求将JSON POST发送到REST

时间:2014-09-29 06:24:58

标签: java jquery json rest jersey

我使用一些数据从JQuery发送POST,但通过我的Javascript我得到了:

400 Bad Request错误和REST未触发

从海报尝试我得到以下内容:

HTTP状态415 - 不支持的媒体类型。服务器拒绝了此请求,因为请求实体的格式不受所请求方法所请求资源的支持。

这是我的JQuery:

function doUpdate(path, rdf)
        {
            var encodedRdf = base64_encode(rdf);
            var data = {"path": path, "rdf": encodedRdf};
            var sUrl = "http://localhost:8080/browsing/services/RDF/update";
            $.ajax({
                type: "POST",
                url: sUrl,
                contentType: "application/json",
                data: data,
                dataType: "json",
                async: false,
                success: function parse(resp, status, xhr) {
                   $("#message").html("STATUS: " + xhr.status + " " + xhr.statusText + "\n" + resp);
                   $("#message").hide();
                   $("#login_message").html("<font color='green'><b>Record succesfully updated</b></font>d");
                },
                error: function(resp, status, xhr){
                    $("#message").html("ERROR: " + resp.status + " " + resp.statusText + "\n" + xhr);
                    $("#message").show();
                }
            });
        }

这是我的REST资源:

@POST
@XmlElement(name = "data")
@Path("/update")
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces(MediaType.APPLICATION_JSON)
public void update(Data data) {
    ... 
}

这是我的数据对象:

@XmlRootElement 
public class Data implements Serializable {

     private String path;
     private String rdf;

      /**
     * @return the path
     */
    public String getPath() {
        return path;
    }
    /**
     * @param path the path to set
     */
    public void setPath(String path) {
        this.path = path;
    }
    /**
     * @return the rdf
     */
    public String getRdf() {
        return rdf;
    }
    /**
     * @param rdf the rdf to set
     */
    public void setRdf(String rdf) {
        this.rdf = rdf;
    }

任何人都可以告诉我问题在哪里?

谢谢,

2 个答案:

答案 0 :(得分:0)

你在web.xml中有以下init参数;

 <init-param>
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
      <param-value>true</param-value>
 </init-param>

答案 1 :(得分:0)

按如下方式编写JSON并对其进行字符串化解决了它!

var data = {"path": path, "rdf": encodedRdf};
...
data: JSON.stringify(data),