【问题标题】:parameters as request parameters on POST method [closed]参数作为POST方法的请求参数[关闭]
【发布时间】:2020-01-06 18:28:49
【问题描述】:

这个问题是关于最佳实践而不是问题。

我正在编写一个spring boot 休息服务,它将执行更新,这意味着我基本上在做POSToperation。输入参数类似于userId,name,emailAddress,phoneNo

所以我的问题是,我可以做如下的事情吗?只需使用POST 告诉这是更新uri,但将所有参数作为请求参数传递而不是requestBody

@PostMapping(value="/my-url )
    public ResponseEntity<?> myMethod(
          @RequestParam(value = "userId")  String userId,
          @RequestParam(value = "name")  String name,
          @RequestParam(value = "emailAddress")  String emailAddress,
          @RequestParam(value = "phoneNo")  String phoneNo){

我知道这行得通,但是,这可以接受吗? 如果可以的话,如果我们以requestparam的形式传递参数,使用请求类型为POST的目的是什么。 专家意见表示赞赏。

【问题讨论】:

  • 是的,你可以做到。您可以创建 xml 或 json 格式的请求正文,而不是传递大量参数,以增加可见性。
  • 将 requestparam 与 POST 一起使用不是根本错误吗?
  • 技术上你可以做到,但它总是被用作请求正文,以防发布请求。
  • 不是重复的。我问的是最佳实践,而这个问题是不同的。

标签: java rest spring-boot post


【解决方案1】:

是的。说到最佳实践,我认为最好的方法是创建一个模型,该模型将是 @RequestBody 参数,然后在 url 中传递一些参数。此外,创建一个模型你肯定会保证一组固定的可能参数,而且你不再需要关心它们的强制性。 顺便提一句。更新操作的最佳实践是 PUT,而不是 POST 请求

【讨论】:

  • 感谢PUTPOST 的澄清。所以你说不要这样做,但最好尽量不要这样做。那么如果我们将所有内容都作为 requestparam 传递,那么将请求类型设置为 POST 的目的是什么?
  • 对不起,没有完全得到你的问题(无论如何。在 cmets 中回答你自己的问题:是的,使用POST 进行更新是完全错误的 - 有国际协议。说到参数传递..好吧,没有人禁止你随心所欲,但这取决于应用程序的要求。下周不会出现更新更复杂模型的要求的保证在哪里?在这种情况下,最好的方法是制作一个可扩展性的基础
  • 你说的是使用 requestbody 但你不是说不要使用 requestparam。我说的对吗?
  • 是的。通常,您应该将可响应的参数分开,以“寻址”请求和将要更新的参数。假设您需要更新一本书的发布日期,它是 ISBN,因此将要更新的参数是“isbn”和“publish_date”,您应该将它们添加到输入模型中,更新的关键是图书的 id .那么你就可以这样:@PutMapping(value = "api/book/{bookId}" public ResponseEntity&lt;?&gt; myMethod( @RequestBody UpdateBookModel model, @PathVariable("bookId") Long bookId {...}
  • 补充说明:您可以使用PUTPATCH进行更新操作,但PATCH通常是对部分资源进行更改。
猜你喜欢
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2017-04-07
  • 2023-03-27
  • 2016-09-03
相关资源
最近更新 更多