- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在使用 ControllerLinkBuilder 和 methodOn 功能时,我不明白的一件事是,当您的 Controller 具有这样的方法签名时,您应该做什么:
public HttpEntity<ResourceSupport> update(@PathVariable(USER_ID) Long userId, @Valid @RequestBody UserUpdateRequest userUpdateRequest, BindingResult bindingResult)
所以每当我想使用 methodOn 时,我该如何填写 UserUpdateRequest 参数和 BindingResult 等空白(我使用绑定(bind)结果来使用 @ControllerAdvice 和 JSR 303 处理错误的请求异常,以使输出消息可读)。
当我希望使用开箱即用的 spring HATEOAS ControllerLinkBuilder 来更轻松地使用 methodOn 我最终会写这样的东西(请注意,我不知道这是否会不会适得其反,但代码看起来并不令人欣慰):
resource.add(linkTo(methodOn(UserController.class).update(userId, null, null)).withSelfRel());
当然,我可以省略 methodOn 部分,而只使用 linkTo,这将需要我在构建路径方面进行尝试。
只传递 null refs 是否合适?另外,使用 methodOn 是否方便,就好像您决定删除 say: BindingResult 或添加类似 HttpServletRequest 到 Controller 方法签名中,以便 spring如果出于某种安全原因我想记录 IP 地址,可以向我传递有关请求的更多信息。这需要我使用 methodOn 去更改链接构造部分。
另一个让我有点困惑的问题是,我将一个合法的 ref 传递给 methodOn,比如 userUpdateRequest 填充了数据 - 这些数据是否会通过生成的链接到达任何地方?我已经看到一些超媒体,其中包括您传递的 rel 和 href 正文 - Spring HATEOAS 是否有可能?创建准备好在其中发布/放入有效负载的链接是否是一种好习惯?
但是回到 ControllerLinkBuilder 仅使用 linkTo 方法构建与 .slash("...") 的链接 - 它可能会更少维护成本高吗?
在日常实践中,您会推荐什么以及您对链接构建有何看法?也许有人可以提供专业的提示/建议。
谢谢,
最佳答案
如果构建路径不需要参数,您可以安全地将 null
传递给 methodOn
。您可以传递“真实”数据,因为仅实际使用了构建路径所需的数据。
methodOn
是一把双刃剑。一方面,它使您免于手动构建链接。所以不会有错误,如果您更改路径,所有链接仍然是正确的。另一方面,您几乎可以肯定永远不会更改路径,但正如您所指出的,您可能会更改方法的签名。在这种情况下,您也被迫更新链接构建代码,因为否则它不会编译。你不能忘记更新,所以这是一件好事。但请考虑以下更改:
update(@ModelAttribute Integer otherId,
@PathVariable(USER_ID) Long userId,
@Valid @RequestBody UserUpdateRequest)
methodOn(UserController.class).update(userId, null, null)
在语义上仍然是正确的,因此您不会收到编译错误。但是,建立链接会失败。
恕我直言,最好的方法是尽可能依赖自动化链接构建,就像 Spring Data REST 所做的那样。您的 API 应该足够简单和一致,以至少提取大部分链接创建代码。然后将使用 slash()
而不是 methodOn
构建链接。
至于包含body:Spring HATEOAS的默认格式是HAL .它使用 _embedded
属性来公开此类数据。
关于java - 带有 methodOn 的 Spring HATEOAS ControllerLinkBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29567069/
使用很棒的 HATEOAS 链接功能我正在尝试输出模板化的 url 以突出显示用户可用的过滤器参数 示例 Controller 方法 @RequestMapping(value = "/persons
我正在使用 spring-hateoas:0.18.0.RELEASE 与 spring-boot:1.2.5.RELEASE 为了调用我的 Web 服务并通过 HAL 链接,我正在使用 特拉弗森客户
我使用 Spring HATEOAS 在我的应用程序中创建 REST HATEOAS API。到目前为止它运行良好,但当涉及到嵌套资源时我陷入困境。将此类层次结构映射到 REST HATEOAS 资源
我想弄清楚如何使用 templated: true 建立 HAL 链接.如果我使用 BasicLinkBuilder.linkToCurrentMapping().slash("api/public/
我们使用 HATEOAS 取得了很好的效果,但是我们一直在关注性能,并且从链接的构建中得到了非常糟糕的结果,即看起来像这样的代码 resource.add(linkTo(methodOn(SomeCo
我有一个带有请求参数的方法,我正在尝试从另一个资源链接到这个方法。我希望链接是这样的: "rel":{ "href":".../resources{?param}", "templated":
我想链接到具有以下签名的方法: public SomeResponse getSomeObjects(@RequestParam(value = "foo", defaultValue = "bar"
我正在构建一个REST API。我有一个由bean组成的域模型,无法扩展ResourceSupport。使用Spring-HATEOAS将它们公开为资源的最佳方法是什么? 如果不可能,在bean生成的
我有这个问题已经在我的脑海里盘旋了一段时间。让我们假设我们已经在不同的层上构建了我们的项目,后端和前端。所以,从前端,我们想要一个客户,它来自 hal+json格式: GET /customers/1
我有一个关于 Spring HATEOAS 的表示模型处理器的问题。我们正在尝试在将模型序列化给客户端之前对其进行处理。我们的用例是丰富 imageUrl领域UserModel对象在运行时,因为我们必
想象一下,我有一个完全实现的REST API,它也提供了HATEOAS。 假设我浏览了根目录,除了自我链接之外,还返回了其他两个链接(例如,一个用于/users和一个用于/orders)。据我所知,H
据说在定义良好的 RESTful 系统中,客户端只需要知道根 URI 或几个众所周知的 URI,客户端将通过这些初始 URI 发现所有其他链接。我确实理解这种方法的好处(解耦客户端),但对我来说不利的
遵循 HATEOAS 原则,每个状态都应该是超链接的,对改变资源状态的链接进行建模的最佳方法是什么? 让我们以订单为例: { id : 12, state: 'pending', .
我试图对 HATEOAS 有一个清晰、简洁的理解,而且我绝不是 WRT REST 专家。 (我想我明白了,感谢这个 http://www.looah.com/source/view/2284 )。 有
我有理由相信我了解 HATEOAS 设计的服务器端 - 在响应中返回状态 URL - 但我对如何设计客户端来接受这些感到有点困惑。 例如,我们在//somehost.com/resource/1 访问
我正在阅读有关 spring-hateoas 的内容,看起来 1.0 有很多变化。我想切换到 1.0 但是我的 pom.xml 正在引入 0.25.2。 我试过用 org
我正在努力了解 HATEOAS。 让我们通过一个例子来工作。客户端将浏览器加载到 getemails.com。为简单起见,让我们假设对 getemails.com 的调用访问了服务器并返回一个电子邮件
我有 Spring Data Rest 和 Hateoas 作为我的支持。它在代理后面。 后端网址:backend.com 代理网址:proxy.com 当我查询代理网址时,例如http://prox
我可以有一些 HATEOAS 的示例/典型用例吗? ?我同意它可以是一个非常强大的概念,提供了很大的灵活性,但我不确定如何正确地从 HATEOAS 中受益。如果您可以分享您的经验/用例,那就太好了。
HATEOAS(作为应用程序状态引擎的超媒体)建议是否暗示查询字符串不是 RESTful? 编辑:下面建议查询字符串可能与状态没有太大关系,因此这个问题令人费解。我建议 URI 具有查询字符串没有意义
我是一名优秀的程序员,十分优秀!