繁体   English   中英

带有methodOn的Spring HATEOAS ControllerLinkBuilder

[英]Spring HATEOAS ControllerLinkBuilder with methodOn

使用带有methodOn功能的ControllerLinkBuilder时,我不明白的一件事是当你的Controller有这样的方法签名时你应该怎么做:

public HttpEntity<ResourceSupport> update(@PathVariable(USER_ID) Long userId, @Valid @RequestBody UserUpdateRequest userUpdateRequest, BindingResult bindingResult)

所以每当我想使用methodOn,我怎样填补像UserUpdateRequest参数和BindingResult空白(我用结合的结果来处理与@ControllerAdvice和JSR 303错误的请求异常,使输出消息人类可读)。

当我想利用开箱春天HATEOAS ControllerLinkBuilder的更多的方便与methodOn我写出来这样的事情(介意我,我不知道这是否会事与愿违但代码看起来不舒服):

resource.add(linkTo(methodOn(UserController.class).update(userId, null, null)).withSelfRel());

Ofcourse我可以省略methodOn一部分,只是使用linkTo那么这就需要我玩围绕建设路径。

传递null refs是否合适? BindingResult或添加类似的HttpServletRequest控制器方法签名,这样弹簧可以传递我关于请求的详细信息,如果我想为一些安全原因,登录IP地址:加用methodOn,如果你决定删除怎么说是很方便。 这将要求我使用methodOn更改链接构造部分。

是位难以置信我还有一个问题是说,我通过一个合法的裁判methodOnuserUpdateRequest充满了数据-这是否想与生成的链接去任何地方的数据? 我已经看到一些超媒体包含rel和href你传递的内容 - 是否可以使用Spring HATEOAS,这是一个很好的做法,创建链接,准备发布/放入有效负载?

但是,仅使用linkTo方法建立与.slash(“...”)链接的方法回到ControllerLinkBuilder,是否可能降低维护成本?

在日常实践中你会推荐什么,你对链接构建有什么看法? 也许有人可以提供专业的提示/建议。

谢谢,

如果不需要参数来构建路径,则可以安全地将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构建链接。

至于包含一个正文:Spring HATEOAS的默认格式是HAL 它使用_embedded属性来公开此类数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM