首页 \ 问答 \ 使用@RequestParam还是@PathVariable?(Use @RequestParam or @PathVariable?)

使用@RequestParam还是@PathVariable?(Use @RequestParam or @PathVariable?)

我正在使用spring框架开发REST WebApp,现在我想知道接收数据的最佳实践。 最好用@RequestParam@PathVariable检索它们?显然我有兴趣接收像useridusername这样的简单数据。 使用示例:

@RequestMapping(value = "/getdata", method = RequestMethod.GET)
public String GetData(@RequestParam(value = "memberId", required = true) Integer memberId){
  //return data for user with Id = memberid;
}

要么

@RequestMapping(value = "/getdata/{memberid}", method = RequestMethod.GET)
public String GetData(@pathvariable int memberid){
  //return data for user with Id = memberid;
}

我对REST Web服务感兴趣


I' m developing a REST WebApp with spring framework, now i'd like to know the best practice to receive data. It s best to retrieve them with @RequestParam or @PathVariable?Obviously i'm interested in receiving simple data like an userid or an username. Using an example:

@RequestMapping(value = "/getdata", method = RequestMethod.GET)
public String GetData(@RequestParam(value = "memberId", required = true) Integer memberId){
  //return data for user with Id = memberid;
}

or

@RequestMapping(value = "/getdata/{memberid}", method = RequestMethod.GET)
public String GetData(@pathvariable int memberid){
  //return data for user with Id = memberid;
}

I'm interested about REST web services


原文:
更新时间:2022-07-03 21:07

最满意答案

看看ete2 python包 ,它们的树是根据Newick树格式定义的(参见wiki:Newick获得直觉)

定义一棵树

from ete2 import Tree

t = Tree("(A,(B,(E,D)));" ) # Loads a tree structure from a newick string. The returned variable ’t’ is the root node for the tree.

print t

   /-A
--|
  |   /-B
   \-|
     |   /-E
      \-|
         \-D

穿越树 (更多信息)

for node in t.traverse("postorder"):
  # Do some analysis on node
  print node.name

一个工作树遍历Python脚本

这里

相关问题

决定折断这棵树的截止点的算法?


Have a look at the ete2 python package, their trees are defined according to the Newick tree format (see wiki:Newick to gain intuition)

Defining a tree

from ete2 import Tree

t = Tree("(A,(B,(E,D)));" ) # Loads a tree structure from a newick string. The returned variable ’t’ is the root node for the tree.

print t

   /-A
--|
  |   /-B
   \-|
     |   /-E
      \-|
         \-D

Traversing a tree (more information)

for node in t.traverse("postorder"):
  # Do some analysis on node
  print node.name

A working tree-traversing Python script

Here

Related question

Algorithm to decide cut-off for collapsing this tree?

相关问答

更多
  • 如果您不想存储任何内容,并且可以进行深度优先搜索: process = TRUE; while(pNode != null) { if(process) { //stuff } if(pNode->child != null && process) { pNode = pNode->child; process = true; } else if(pNode->next != null) { pNode = ...
  • 您需要执行Python教程 - 您不了解实例对象在Python实例方法中的工作方式。 你的问题在这里: def viewAll(this): if this != None: print this.data, viewAll(this.leftNode) viewAll(this.rightNode) 您需要在要调用它的实例上访问viewAll : def viewAll(this): if this != None: pri ...
  • 使用的最佳方法是closest ,它找到与选择器匹配的最近的祖先元素: $this.closest('div.box-1').hide(); The best method to use is closest, which finds the nearest ancestor element that matches a selector: $this.closest('div.box-1').hide();
  • 您可以尝试基于os.walk()创建一个函数。 这样的事情应该让你开始: import os def walker(base_dir, level=1, string=None): results = [] for root, dirs, files in os.walk(base_dir): _root = root.replace(base_dir + '\\', '') #you may need to remove the "+ '\\'" if _root ...
  • 数据类型递归地定义树。 树由单元组成,每个单元可以是“空”,“叶”或“节点”。 “Node”案例中有2个子树也是树,这是递归定义。 这个想法是树可以是空的,也可以是单个元素,或者是连接到另外两个树的单个元素。 traverse代码也递归地工作。 如果遇到空树,则返回空列表。 如果遇到单个元素,则返回它。 如果遇到“节点”,则它会递归运行两个子树,然后将结果与++运算符组合。 The data type defines a tree recursively. A tree is composed of cel ...
  • 我选择在这里使用这个简单的递归函数find相关的节点: def find(t, search): # # Find the *first* dictionary object having # the key "search" for k in t: if k == search: return t if isinstance(t[k],dict): result = find(t[k],sear ...
  • 看看ete2 python包 ,它们的树是根据Newick树格式定义的(参见wiki:Newick获得直觉) 定义一棵树 from ete2 import Tree t = Tree("(A,(B,(E,D)));" ) # Loads a tree structure from a newick string. The returned variable ’t’ is the root node for the tree. print t /-A --| | /-B \-| ...
  • 您匹配子目录的名称,而不是当前目录的名称。 如果您只有一个带有数字的嵌套目录, if只要您进入这些子目录, if语句就会出错。 我不认为你理解在每次迭代中, root是列出目录的路径, dirs是子目录名称列表。 与root匹配: for root, dirs, files in os.walk(os.getcwd()): dirname = os.path.basename(root) val = re.search('\d+', dirname) if val: ...
  • 我不确定“物化路径”是否是最好的数据结构,因为它似乎非常冗余。 也许你想查找邻接列表(即存储id ,每个条目的parent_id )或嵌套集(存储id , right邻居ID)。 这是对两种结构的一个很好的概述。 您想要的是在树上执行深度优先搜索 (DFS)。 前段时间,这个问题涉及到这个问题,所以你可能会觉得它很有用。 有一种通过SQL查询执行DFS的方法,但实现可能取决于您使用的数据库软件。 在任何情况下,您都可以使用堆栈来实现DFS,以存储您仍需要访问的元素的ID。 每次访问后,您将节点的子节点推入堆 ...
  • 出于同样的原因,仅仅从外部调用_loopallchildren(root)而不对其做任何事情也没有做任何事情。 您必须迭代生成器才能使用它。 在yield from _loopallchildren(child)您可以使用yield from _loopallchildren(child) 。 For the same reason that merely calling _loopallchildren(root) from the outside without doing anything with ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)