Xep*_*ris 11 java spring spring-mvc spring-hateoas
使用带有methodOn功能的ControllerLinkBuilder时,我不明白的一件事是当你的Controller有这样的方法签名时你应该怎么做:
public HttpEntity<ResourceSupport> update(@PathVariable(USER_ID) Long userId, @Valid @RequestBody UserUpdateRequest userUpdateRequest, BindingResult bindingResult)
Run Code Online (Sandbox Code Playgroud)
所以每当我想使用methodOn,我怎样填补像空白UserUpdateRequest参数和BindingResult(我用结合的结果来处理与@ControllerAdvice和JSR 303错误的请求异常,使输出消息人类可读).
当我想利用开箱春天HATEOAS的ControllerLinkBuilder更多的方便与methodOn我写出来这样的事情(介意我,我不知道这是否会事与愿违但代码看起来不舒服):
resource.add(linkTo(methodOn(UserController.class).update(userId, null, null)).withSelfRel());
Run Code Online (Sandbox Code Playgroud)
Ofcourse我可以省略methodOn一部分,只是使用linkTo那么这就需要我玩围绕建设路径.
传递null refs 是否合适?加上使用它是如何方便methodOn:因为如果你决定要删除的发言权BindingResult或添加类似的HttpServletRequest控制器方法签名,这样弹簧可以传递我关于请求的详细信息,如果我想为一些安全原因登录的IP地址.这将要求我使用methodOn更改链接构造部分.
是位难以置信我还有一个问题是说,我通过一个合法的裁判methodOn像userUpdateRequest充满了数据-这是否想与生成的链接去任何地方的数据?我已经看到一些超媒体包含rel和href你传递的内容 - 是否可以使用Spring HATEOAS,这是一个很好的做法,创建链接,准备发布/放置有效负载?
但是,仅使用linkTo方法建立与.slash("...")链接的方法回到ControllerLinkBuilder,是否可能降低维护成本?
在日常实践中你会推荐什么,你对链接构建有什么看法?也许有人可以提供专业的提示/建议.
谢谢,
如果不需要参数来构建路径,您可以安全地传递null给methodOn. 您可以传递“真实”数据,因为实际仅使用构建路径所需的数据。
methodOn是一把双刃剑。一方面,它使您无需手动构建链接。因此不会出现错误,如果您更改路径,所有链接仍然正确。另一方面,您几乎肯定永远不会更改路径,但正如您所指出的,您可以更改方法的签名。在这种情况下,您也被迫更新链接构建代码,因为否则它将无法编译。你不会忘记更新,所以这是一件好事。但请考虑以下更改:
update(@ModelAttribute Integer otherId,
@PathVariable(USER_ID) Long userId,
@Valid @RequestBody UserUpdateRequest)
Run Code Online (Sandbox Code Playgroud)
methodOn(UserController.class).update(userId, null, null)在语义上仍然是正确的,因此您不会收到编译错误。但构建链接将会失败。
恕我直言,最好的方法是尽可能依赖自动链接构建,就像 Spring Data REST 所做的那样。您的 API 应该简单且一致,足以提取至少大部分链接创建代码。slash()然后将使用而不是构建链接methodOn。
至于包含主体:Spring HATEOAS 的默认格式是HAL。它使用一个_embedded属性来公开此类数据。
| 归档时间: |
|
| 查看次数: |
5332 次 |
| 最近记录: |