[英]Correctly posting JSON data to restful webservice netbeans
我使用netbeans中的“從數據庫生成Web服務選項”創建了一個安靜的Web服務。 我已經在wildfly中部署了這個,並注意到當GET請求工作時,POST請求不會。 這是我接受POST連接的java代碼的一部分:
@POST
@Override
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public void create(XtgpsActivity entity) {
super.create(entity);
}
create方法采用XtgpsActivity類型的參數。 這是XtgpsActivity類:
//packages and imports list removed
@Entity
@Table(name = "xtgps_Activity")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "XtgpsActivity.findAll", query = "SELECT x FROM XtgpsActivity x"),
@NamedQuery(name = "XtgpsActivity.findById", query = "SELECT x FROM XtgpsActivity x WHERE x.id = :id")})
public class XtgpsActivity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "Id")
private Integer id;
@JoinColumn(name = "BaseItemId", referencedColumnName = "Id")
@ManyToOne
private XtgpsBaseItem baseItemId;
@OneToMany(mappedBy = "activityId")
private Collection<XtgpsNearByActivity> xtgpsNearByActivityCollection;
public XtgpsActivity() {
}
public XtgpsActivity(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public XtgpsBaseItem getBaseItemId() {
return baseItemId;
}
public void setBaseItemId(XtgpsBaseItem baseItemId) {
this.baseItemId = baseItemId;
}
@XmlTransient
public Collection<XtgpsNearByActivity> getXtgpsNearByActivityCollection() {
return xtgpsNearByActivityCollection;
}
public void setXtgpsNearByActivityCollection(Collection<XtgpsNearByActivity> xtgpsNearByActivityCollection) {
this.xtgpsNearByActivityCollection = xtgpsNearByActivityCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof XtgpsActivity)) {
return false;
}
XtgpsActivity other = (XtgpsActivity) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "au.com.xitech.XtgpsActivity[ id=" + id + " ]";
}
}
這是超類中的create方法:
public void create(T entity) {
getEntityManager().persist(entity);
}
由於相關表只有兩列id和baseitemid,而id是主鍵,我發送的POST JSON數據如下:
{"baseitemid":"2"}
但是,當我以這種格式發布數據時,我收到一個錯誤:
http://localhost:8089/xxx/api/activity/ 400 (Bad Request)
我相信這是因為我發送的JSON數據存在問題。 為post請求創建JSON數組的正確方法是什么?
PS :我還在下面附上了我的ajax電話。 注意我在瀏覽器中啟用CORS后執行此操作。
$('#submit_it').click(function(e) {
//console.log("submit button has been clicked");
e.preventDefault(); //cancel form submit
var jsObj = $post_example.serializeObject()
, ajaxObj = {};
//console.log(jsObj);
alert(JSON.stringify(jsObj));
ajaxObj = {
type: "POST",
url: "http://localhost:8089/xxx/api/activity/",
data: JSON.stringify(jsObj),
contentType:"application/json",
success: function(data) {
//console.log(data);
if(data[0].HTTP_CODE == 200) {
$('#div_ajaxResponse').text( data[0].MSG );
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error " + jqXHR.getAllResponseHeaders() + " " + errorThrown);
},
complete: function(XMLHttpRequest) {
//console.log( XMLHttpRequest.getAllResponseHeaders() );
},
dataType: "json" //request JSON
};
$.ajax(ajaxObj);
});
在json中傳遞的值被解析為數值,因此發送為(沒有值的引號)
{
"baseitemid":2
}
工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.