当前位置: 首页 > 知识库问答 >
问题:

通过REST调用使用外键将项目添加到集合中

李耀
2023-03-14

我有两个双向关联的jpa实体。

实体容器,用于保存项目集合(oneToMany)的对象获取器/设置器

@javax.persistence.Entity
@Table(name = "CONTAINER")
public class Container implements Serializable {
    private static final long serialVersionUID = -3288335692695653843L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "container", cascade = CascadeType.ALL)
    private List<Item> items;

}

EntityItem包含对容器(ManyToOne)的引用,以及属性值和日期。Ommiting setter/getters

@javax.persistence.Entity
@Table(name = "ITEM")
public class Item implements Serializable {

    private static final long serialVersionUID = -758343957629274274L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Long id;

    @Basic
    private Long value;
    @Basic
    private Date date;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "CONTAINER_ID")
    private Container container;
}

我还使用spring数据存储库来公开数据。

我的界面存储库只是扩展了crudepository

@RepositoryRestResource
public interface ItemRepository extends CrudRepository<Item, Long> {
}

@RepositoryRestResource
public interface ContainerRepository extends CrudRepository<Container, Long> {
}

我正在尝试通过REST调用创建项目。

首先,我在items repositoryrest/items

POST { "value" : 666, "date" : "2016-01-31T23:00:00.000+0000", "container": {"id":"1"}}

但它只是在容器上创建带有空引用的项。

当我尝试通过容器存储库添加时rest/containers/1/items

POST { "value" : 666, "date" : "2016-01-31T23:00:00.000+0000", "container": {"id":"1"}}

我得到HTTP/1.1 204 No Content

我的问题是如何通过引用容器的REST调用添加项目。

编辑:要指定我的问题,我想为现有容器添加新项。在通过rest(json)创建Item实例时,我不知道如何处理外部ID键


共有2个答案

祁飞飙
2023-03-14

http响应状态204为无内容。也就是说,您正在调用的REST方法是void,即使创建了实例,它也不会返回任何内容。

您确定实例没有创建吗?,如果没有,请在应该创建它们的地方发布代码,以便我们更好地了解正在发生的事情。

宋景福
2023-03-14

我通过使用json中容器的链接解决了这个问题。

POST{“value”:666,“date”:“2016-01-31T23:00:00.000 0000”,“container”:http://localhost:8080/container/1“}

我不确定如果没有spring数据rest

编辑:我应该指出,链接的资源必须是@RepositoryRestResource,并且应该是聚合根。

 类似资料:
  • 问题内容: 为什么使用此Java代码会出现编译器错误? 其中“ SubFoo”是实现Foo的具体类,而Foo是接口。 我收到此代码错误: 在第3行上:“无法实例化ArrayList <?扩展了Foo>” 在第4行上:“类型List 中的方法add(capture#1-of扩展Foo)不适用于参数(SubFoo)” 更新: 感谢Jeff C,我可以将第3行更改为“ new ArrayList ();

  • 问题内容: 我正在尝试使用最新的REST API发布JIRA附件。这是我的代码: 但是,我得到以下回应: 我的本地JIRA实例中确实存在密钥TEST-2的问题,我可以在Jira应用程序本身中“手动”添加附件。我知道我必须添加类型为“ X-Atlassian- Token:nocheck”的标头以防止XSRF,但是从输出来看,我必须做错了什么。令我更加困惑的是,在XSRF检查失败。 我已经在Goog

  • 我有一个示例项目,设置如下: 其中“测试项目”依赖于“测试库”,而最后一个依赖于“纯Java库”,编译该项目并启动此设置工作正常。 我现在正在考虑导入以前的Eclipse工作区,并与Android studio一起工作,问题是项目设置不同,我希望保持这种方式。 我尝试了很多配置,但没有找到一种方法来引用父文件夹范围之外的项目(在示例中为'root')。 在许多平台/模块中,您可以使用“..”但这对

  • 我的情况:我有一个可以有很多工人的组织。我正试图按照SDR项目的主要贡献者的例子向一个组织添加一个新工人,我得到了各种错误(包括204个错误,但什么也没发生)。 以下是我的实体和Rest电话: 收到http://localhost:8080/hal 邮递http://localhost:8080/hal/workers 答复: 最后一步,按照说明中的链接: 进行一些调试,很明显具体的投诉是什么。堆

  • 我试图通过FXML文件将项目添加到组合框中,但出现了这个错误。 这是我的FXML 主要 当我通过scene builder打开它时,会出现这个错误 我已经仔细检查过了,但代码似乎没问题。当我删除试图添加到FXML的值时,错误消失了,但我的组合框变为空。它说String不是有效的类型。我怎样才能解决这个问题?为什么它是无效的?我在这里检查了类似的问题,但是错误是由于没有导入FXCollections

  • 问题内容: 为什么下面 不行?只是为了学习而玩弄泛型,我希望我能够在其中插入任何扩展Collection的内容,但会出现此错误: 问题答案: 您已声明是的扩展名。但是根据Java编译器,它可以是 任何 扩展的元素,即。因此,出于这个原因,它必须禁止采用通用类型参数的操作。它不能让你的加入到这可能是。 尝试删除通配符: 这应该工作,因为你可以肯定是一个添加到的。