gpt4 book ai didi

java - 正确地将 JSON 数据发布到 Restful Web 服务 NetBeans

转载 作者:太空宇宙 更新时间:2023-11-04 12:15:19 25 4
gpt4 key购买 nike

我使用 netbeans 中的“从数据库生成 Web 服务选项”创建了一个 Restful Web 服务。我已将其部署在 Wildfly 中,并注意到虽然 GET 请求有效,但 POST 请求却无效。这是我的 java 代码中接受 POST 连接的部分:

@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 + " ]";
}

}

这是父类(super class)中的创建方法:

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
}

成功了。

关于java - 正确地将 JSON 数据发布到 Restful Web 服务 NetBeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473355/

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