- 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/
我正在尝试使用 Spring hateoas 来解析从抽象 Controller 继承的端点的 URL。 我认为先给出代码会让问题更容易理解。 这是我的抽象 Controller : package
在使用 ControllerLinkBuilder 和 methodOn 功能时,我不明白的一件事是,当您的 Controller 具有这样的方法签名时,您应该做什么: public HttpEnti
我正在尝试调用 Spring 的 ControllerLinkBuilder.methodOn()使用非 String 类型,它总是失败。而我不知道是哪种Converter使用以及在哪里注册。 这是我
我正在关注 Spring RESTfull API 教程。本教程要求在某个时候使用 Spring HATEOAS。但是,我的 IDE STS 找不到方法 linkTo 和 methodOn 的引用。
我是一名优秀的程序员,十分优秀!