Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JSON数据正确发布到restful webservice netbeans_Java_Json_Web Services_Netbeans - Fatal编程技术网

Java 将JSON数据正确发布到restful webservice netbeans

Java 将JSON数据正确发布到restful webservice netbeans,java,json,web-services,netbeans,Java,Json,Web Services,Netbeans,我使用netbeans中的“从数据库生成web服务选项”创建了一个restful web服务。 我已经在wildfly中部署了这一功能,并注意到GET请求起作用,POST请求则不起作用。 下面是我的java代码中接受POST连接的部分: @POST @Override @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public void create(XtgpsActivity ent

我使用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 + " ]";
    }

}
由于相关表只有两列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中传递的值被解析为数值,因此发送为(不带引号)


工作。

在json中传递的值被解析为数值,因此发送为(不带引号)


工作。

由于问题似乎不涉及PHP,您应该删除该标记。顺便说一句。。您是否尝试过这样做:
data:jsObj,
而不是
data:JSON.stringify(jsObj),
?@MagnusEriksson尝试过这个,但没有成功。我也去掉了标签。我感觉JSON数据没有正确发送,因此无法按照create方法的要求转换为实体对象。在这方面是否有任何指定json数据的标准?首先检查浏览器实际发送的内容。您通常可以在浏览器开发工具的“网络”选项卡下看到真正的请求。确保它发送正确的JSON。如果有,请尝试一些工具,如postman,将一些JSON数据发送到Java API,看看它是否正确处理。@MagnusEriksson非常感谢postman,这是一个了不起的发现。仍在尝试修复它,将更新进度。由于问题似乎不涉及PHP,您应该删除该标记。顺便说一句。。您是否尝试过这样做:
data:jsObj,
而不是
data:JSON.stringify(jsObj),
?@MagnusEriksson尝试过这个,但没有成功。我也去掉了标签。我感觉JSON数据没有正确发送,因此无法按照create方法的要求转换为实体对象。在这方面是否有任何指定json数据的标准?首先检查浏览器实际发送的内容。您通常可以在浏览器开发工具的“网络”选项卡下看到真正的请求。确保它发送正确的JSON。如果有,请尝试一些工具,如postman,将一些JSON数据发送到Java API,看看它是否正确处理。@MagnusEriksson非常感谢postman,这是一个了不起的发现。仍在尝试修复它,将更新进度。
$('#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);
    });
{
  "baseitemid":2
  }