当前位置: 首页 > 知识库问答 >
问题:

Spring MVC:如何指示是否需要path变量?

栾和玉
2023-03-14

我正在做一个Spring web。对于控制器方法,我可以使用Request estParam来指示是否需要参数。例如:

@RequestMapping({"customer"}) 
public String surveys(HttpServletRequest request, 
@RequestParam(value="id", required = false) Long id,            
Map<String, Object> map)

我想使用PathVariable,例如以下内容:

@RequestMapping({"customer/{id}"}) 
public String surveys(HttpServletRequest request, 
@PathVariable("id") Long id,            
Map<String, Object> map) 

如何指示是否需要path变量?我需要将其设置为可选的,因为创建新对象时,在保存之前没有可用的关联ID。

谢谢你的帮助!

共有3个答案

咸琪
2023-03-14

我知道这是一个老问题,但是搜索“可选路径变量”会让这个答案很高,所以我认为值得指出的是,自从Spring 4.1使用Java1.8以来,使用java.util.可选类是可能的。

一个例子是(注意该值必须列出所有需要匹配的潜在路由,即。有id路径变量而没有。Props to@martin-cmarko以指出这一点)

@RequestMapping(method=GET, value={"/", "/{id}"})
public void get(@PathVariable Optional<Integer> id) {
  if (id.isPresent()) {
    id.get()   //returns the id
  }
}
孔运珧
2023-03-14

没有办法使其可选,但您可以创建两个方法,其中一个具有@Request estMap({"客户"})注释,另一个具有@Request estMap({"客户/{id}"}),然后在每个方法中相应地执行操作。

林弘文
2023-03-14

VTTom的解决方案是正确的,只需将“value”变量更改为array并列出所有url可能性:value={“/”,“/{id}}}

@RequestMapping(method=GET, value={"/", "/{id}"})
public void get(@PathVariable Optional<Integer> id) {
  if (id.isPresent()) {
    id.get()   //returns the id
  }
}
 类似资料:
  • 问题内容: 我在搞弄JAX- RS,制作了一个应用程序,该应用程序调用产生JSON的REST服务。我尝试了Jersey,一切都很好,但是由于我的应用程序需要使用JDK5进行构建,因此我不得不切换到RESTEasy。我将web.xml更改为以下内容: 因此,我希望每个以/ rest开头的URL都将由RESTEasy处理。我的服务如下: 使用Jersey可以正常工作,http:// localhost

  • 在OS X10.8.2上,我使用JNA和gstreamer-java(通过Eclipse IDE)加载gstreamer库。首先,我使用gstreamer.com提供的SDK安装了gstreamer。但是,我卸载了这个,并使用Macports来安装它。 SDK的lib安装到: 现在,假设我想通过某个环境变量设置java来知道这个位置。这可能吗?看起来是这样,因为运行这条线: 显示。但我一辈子都想不

  • 问题内容: AFAIK,您无需在onclick中指定协议: 坏 好 今天,我在GoogleAnallytics上注意到他们正在使用它: 这个例子是完全错误的,还是有理由指定除?以外的其他内容? 问题答案: 这里的一些响应声称“javascript:”前缀是“过去的遗留物”,这意味着浏览器有意对它进行了特殊处理,以实现向后兼容。是否有确凿的证据证明是这种情况(有人检查过源代码)吗? 对我来说,它的意

  • 问题内容: 考虑以下代码块: 当我在构造函数中初始化两个变量(和)时,其他两个变量(和)是否需要内存中的空间来存储null值? Q1。如果它们确实需要空间,那么值将占用多少内存?(例如,占用4个字节)。 Q2。字符串在内存中占用多少空间?字符串需要多少存储空间?它取决于字符串的长度吗? 问题答案: 在Java中,它只是引用(基本上是受限制的指针)可以具有的值。这意味着引用没有任何意义。在这种情况下

  • 随着新的工具栏小部件的引入和AppCompat(android.support.v7.widget.Toolbar)版本的推出,是否还需要调用setSupportActionbar(工具栏)?或者调用setSupportActionbar有什么好处吗;现在我们可以设置标题、子标题、导航图标、导航图标单击侦听器(getSupportActionBar()。直接在工具栏上设置DisplayHomeAs

  • 问题内容: 我想根据变量是否为null显示/隐藏div。 注意:在我的情况下,变量是一个对象。 这是一个非常简单的问题,但我似乎无法使其正常工作。 谢谢。 问题答案: 需要澄清的是,上面的示例确实有效,示例中的代码由于不相关的原因而无法正常工作。 如果myvar为false,null或之前从未使用过(即从未调用过$ scope.myvar或$ rootScope.myvar),则div将不会显示。