在 Spring Data REST+HATEOAS 中删除 REST 关联

2024-01-04

我想知道如何通过 REST 调用删除多对多关联。我能够创建记录并将它们关联起来,但不知道如何删除。

我有一个 Spring Boot 项目,其中使用 REST 和 HATEOAS 来绕过服务和控制器并直接公开我的存储库。

我有一个用户模型/域类

@Entity
@Table(name = "usr")
public class User implements Serializable {

private static final long serialVersionUID = 1L;

@Version
private long version = 0;

@Id
@GeneratedValue(generator="optimized-sequence")
private Long id;

@Column(nullable = false, unique = true, length = 500)
@Size(max = 500)
private String userName;

@Column(nullable = false, length = 500)
@Size(max = 500)
private String firstName;

@Column(nullable = false, length = 500)
@Size(max = 500)
private String lastName;

@ManyToMany(    fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable( name="user_role",
            joinColumns={ @JoinColumn(  name = "user_id", 
                                        nullable = false
                                    ) 
                        }, 
            inverseJoinColumns={ @JoinColumn(   name="role_id", 
                                                nullable=false
                                            ) 
                                }
)
private Set<Role> roles = new HashSet<Role>(0);

...Getters/Setters Below...

正如你所看到的,我有一个roles与Role类进行多对多关联的member,其代码如下:

@Entity
public class Role {

@Id
@GeneratedValue(generator="optimized-sequence")
private Long id;

@Column(nullable = false)
private String name;

@Column(nullable = false)
private String description;

...Getters/Setters Below...

My 存储库看起来像这样:

用户存储库

public interface UserRepository extends 
        JpaRepository<User, Long>, JpaSpecificationExecutor<User> {

    List<User> findByUserName(String username);

}

角色库

public interface RoleRepository 
        extends JpaRepository<Role, Long> {

}

现在,一切都好。当我从浏览器访问项目根目录时,我得到 JSON+HAL 格式的存储库索引/目录。精彩的。

(请注意,我从下面的测试中删除了 http:// 部分,因为 StackOverflow 将其计入我的链接配额)

我使用 WizTools REST 客户端、HTTP.POST 到角色 ( localhost:8080/resttest/roles ) 存储库并创建一个新角色。成功,已创建角色 ID #4。

然后我 POST 到用户存储库以创建一个用户 ( localhost:8080/resttest/users )。成功,用户 ID #7 创建。

然后我将其放入用户存储库以创建与角色的关联:

PUT localhost:8080/resttest/users/7/roles
Content-type: uri-list
Body: localhost:8080/resttest/roles/4

伟大的!协会作出。用户 9 现在与角色 4 关联。

现在我无法弄清楚如何删除这个关联。

我使用与上面相同的命令发送 HTTP DELETE 而不是 PUT。

DELETE localhost:8080/resttest/users/7/roles
Content-type: uri-list
Body: localhost:8080/resttest/roles/4

我得到回复:HTTP/1.1 405 Method Not allowed

{
    "timestamp":1424827169981,
    "status":405,
    "error":"Method Not  Allowed",
    "exception": "org.springframework.web.HttpRequestMethodNotSupportedException",
    "message":"Request method 'POST' not supported"
}

虽然创建了一个PUT请求剩余元素就可以了,DELETE是删除关联资源的可接受命令,并且在大多数情况下更易于使用。

至于你的例子,这应该有效:

DELETE localhost:8080/resttest/users/7/roles/4

另外,在创建关联时,负载中应该包含 URI。您不需要在正文中写入整个 URL,这应该足够了:

PUT localhost:8080/resttest/users/7/roles
Content-type: uri-list
Body: /roles/4

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring Data REST+HATEOAS 中删除 REST 关联 的相关文章

随机推荐

  • 隐藏盒子阴影的部分

    免责声明 我已经看到以下问题 尽管它们的情况非常相似 但它们的解决方案并不适用于我 在除一侧以外的所有面上创建 CSS3 框阴影 https stackoverflow com questions 1429605 css3 box shad
  • 如何通过 Terraform 将 Iceberg 表部署到 AWS

    尝试确定将一些 Iceberg 表部署到我们的 AWS 环境中的最佳方法 有人通过 Terraform 取得成功吗 我有以下配置 但当我查询我创建的表时 Athena 抱怨缺少元数据位置 或者将永远旋转 如果有更好的方法可以自动化部署 请告
  • 如何知道 uitableview 是否有选定的单元格

    我正在开发一个应用程序 有时我有几个 uitableview 我想知道委托方法之外的操作 例如表视图是否有选定的单元格以及是哪个单元格 我尝试使用 NSIndexPath indexPathForSelectedRow但它不起作用 因为如果
  • 通过选项选择更新 SVG

    我正在尝试获取 SVG 中的文本元素以通过选项更改进行更新 搜索后 我已经能够到达 在控制台中 在页面初始加载期间以及选项更改时看到选项更改的位置 但我未能成功更改数字 任何帮助 将不胜感激
  • VIM 中更好的自动完成功能

    All 我使用 vim 已经有一段时间了 并且喜欢它的一切 我真正怀念 RubyMine 这样的 IDE 中只有一件事 那就是高级自动完成功能 作为参考 这是我的标准 VIM 设置 https github com wrwright vim
  • 如何在 spring mvc 中提供静态内容?

    我在当前的项目中使用 spring mvc 框架 ROOT文件夹有很多包含html jsp css js等的web文件夹 我的spring mvc配置如下
  • UIScrollView 如何更改框架而不更改边界? UIScrollView 是如何工作的?

    我理解框架和边界之间的区别 我认为 边界是视图的本地坐标系 而框架是超级视图 然而 对于滚动视图 我有点困惑 当我在 UIScrollView 中有一个 UIImageView 并将其放大时 似乎框架变大 宽度和高度 也会增加相应 UIIm
  • 在 google 地图中查找给定点 5 公里半径范围内的位置

    嘿 我只是想收集谷歌地图数据库中给定点 5 公里半径以下的位置 我会将它们存储在数据库中以供以后处理 这可以完成吗 谢谢 如何获取所需圆内点的经度和纬度 您可以使用地点搜索 http code google com intl fr apis
  • 有没有办法通过作业名称获取 Quartz 中的作业密钥

    现在我正在寻找在 Quartz 库中通过作业名称获取作业密钥的功能 我看到Scheduler有方法通过组名称获取作业密钥GroupMatcher
  • Android 中是否有 API 支持以编程方式进行电话会议?

    我想通过从我的应用程序中选择一些联系人来进行电话会议 可以吗 电话会议中的设备数量是否有限制 有没有 Android SDK 支持 任何版本都适合我吗 请提供一些意见 提前致谢 您无法使用智能手机管理会议 您需要一个可以为您完成此操作的中间
  • django 脆皮形式 内联表单

    我正在尝试采用脆形式和引导程序 并尽可能多地使用它们的功能 而不是一遍又一遍地发明一些东西 有没有一种方法可以像 django admin 表单那样使用 Cripy forms bootstrap 来实现内联表单功能 这是一个例子 clas
  • 如何在 Perl 中连接两个散列而不使用循环?

    如何在 Perl 中将哈希 a 附加到哈希 b 而不使用循环 如果您的意思是合并他们的数据 只需执行以下操作 c a b
  • 如何在Python中用单反斜杠替换双反斜杠? [复制]

    这个问题在这里已经有答案了 我有一根绳子 该字符串中有双反斜杠 我想用单反斜杠替换双反斜杠 以便可以正确解析 unicode 字符代码 Pdb p fetched page p style text align center align c
  • 在 Android Studio 中导入 Facebook 库:找不到属性“ANDROID_BUILD_SDK_VERSION”

    我想将库项目导入到我的应用程序中 但每当我尝试这样做时 Android Studio 都无法识别它 它还在 build gradle 中给了我错误 该库是 PagerSlidingTabStrip 以下是一些图片 到目前为止我已经尝试了三天
  • .NET StringBuilder 在前面添加一行

    我知道System Text StringBuilder在 NET中有一个AppendLine 方法 但是 我需要在 a 的开头预先附加一行StringBuilder 我知道你可以使用Insert 附加一个字符串 但我似乎无法用一行来做到这
  • @Scheduled 方法内部的 Spring @Async 方法调用

    我正在使用 Spring boot EnableScheduling and EnableAsync 我有一个注释为的方法 Scheduled 我还有几个方法 注释为 Async 现在我称这些为 Async中的方法 Scheduled方法并
  • 在Powershell中使用Import-CSV,忽略注释行

    我认为我一定错过了一些明显的东西 因为我正在尝试使用 Import CSV 导入已在文件顶部注释掉行 始终以 作为第一个字符开头 的 CSV 文件 因此文件看起来像这样 SpecialCSV Version 1 0 0 Table Head
  • R,dplyr:如果每组只有一个唯一的非 NA 元素,则按组折叠字符变量元素

    假设我有以下 data framedf患者家乡和一项任意临床指标 心率 id lt c rep 1 3 each 2 rep 4 3 pt hometown lt c Atlanta NA NA San Diego NA NA San Fr
  • 使用 AWS Glue 或 PySpark 过滤 DynamicFrame

    我的 AWS Glue 数据目录中有一个名为 mytable 的表 该表位于本地 Oracle 数据库连接 mydb 中 我想将生成的 DynamicFrame 过滤为仅 X DATETIME INSERT 列 时间戳 大于特定时间 在本例
  • 在 Spring Data REST+HATEOAS 中删除 REST 关联

    我想知道如何通过 REST 调用删除多对多关联 我能够创建记录并将它们关联起来 但不知道如何删除 我有一个 Spring Boot 项目 其中使用 REST 和 HATEOAS 来绕过服务和控制器并直接公开我的存储库 我有一个用户模型 域类