REST Web应用程序外键问题

时间:2014-04-18 04:40:34

标签: json hibernate rest jboss libcurl

我正在开发一个RESTful Web应用程序,其规格如下:

  1. 数据库中的两个表tableA和tableB。
  2. tableA包含名为col1A和col2A
  3. 的列
  4. tableB包含名为col1B,col2B和col1A的列;最后一列(col1A)是外键,映射到tableA的主键。
  5. 与表对应的JAVA类定义为:

    class tableA {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @XmlTransient
        private int col1A;
    
        private string col2A;
    
        // getters and setters
    }
    
    class tableB {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @XmlTransient
        private int col1B;
    
        @XmlTransient
        @ManyToOne(fetch=FetchType.LAZY)
        @JoinColumn(name = "col1A", referencedColumnName = "col1A", insertable = false, updatable = false)
        private tableA tableAObj;
    
        private string col2B;
    
        // getters and setters
        // There is a getter and setter for the col1A field as well.
    }
    

    使用libcurl,我将JSON对象发送到上面的Web应用程序。其中一个JSON对象(被发送以持久保存到tableB中)的格式为:

    {
    "col1A" : 1,               // assume this is the correct value of col1A
    "col2B" : "col2BVal",
    }
    

    在将上述JSON对象发送到Web应用程序时,我收到以下错误:

    在libcurl方面(我在libcurl中启用了详细信息):

      

    例外:N / A(通过参考链:com.package1.tableB [" col1A"])。客户端发送的请求在语法上是不正确的(org.codehaus.jackson.map.JsonMappingException:N / A(通过引用链:com.package1.tableB [" col1A"]))

    在网络应用程序上:

      

    执行POST /:org.jboss.resteasy.spi.ReaderException失败:org.codehaus.jackson.map.JsonMappingException:N / A(通过参考链:com.package1.tableB [" col1A" ])。

    上面的Web应用程序异常出现在类tableB的col1A的setter中。

    我删除了col1A的getter和setter(在类tableB中),然后再次使用libcurl发送了JSON对象,只是为了接收以下错误:

    在libcurl方面:

      

    HTTP状态400 - org.codehaus.jackson.map.exc.UnrecognizedPropertyException:无法识别的字段" col1A" (类com.package1.tableB),未标记为可忽略。

    在网络应用程序上:

      

    无法识别的字段" col1A" (类com.package1.tableB),未标记为可忽略。

    如果有人可以提供帮助,谢谢。

    修改

    类tableB中col1A字段的getter和setter函数定义为:

    public int getCol1A() {
        return getTableA().getCol1A();
    }
    
    public void setCol1A(int Col1AVal) {
        getTableA().setCol1A(Col1AVal);
    }
    

    其中getTableA()返回类tableB的tableAObj字段。

1 个答案:

答案 0 :(得分:1)

我认为JSON应该是这样的:

{
    "tableAObj" : { 
                  "col1A" : 1,               // assume this is the correct value of col1A
                  "col2A" : "value"
     },   
    "col2B" : "col2BVal"
}

基本上,tableB的JSON应该有一个用于tableA的嵌套JSON。