在 UriComponentsBuilder 中使用 Expand() 和直接添加值有什么不同?
//#1
String uri = UriComponentsBuilder.fromUriString(someUrl)
.path("/" + var1 + "/path1/" + var2)
.build();
.toUriString();
<小时/>
//#2
Map<String, Object> pathVariableMap = new HashMap<>();
pathVariableMap.put("var1", "var1");
pathVariableMap.put("var2", "var2");
String uri = UriComponentsBuilder.fromUriString(someUrl)
.path("/{var1}/path1/{var2}")
.buildAndExpand(pathVariableMap)
.toUriString();
所以, 为什么我们使用 Expand() 来构建 URI?为了可读性?
最佳答案
来自官方Spring Framework网站,build()
和buildAndExpand()
方法将根据参数执行不同的操作。
案例#1
它将从此构建器中包含的各种组件创建一个 UriComponents 实例。在您的情况下,组件就像 someurl 和路径,这些组件将绑定(bind)在一起并使用 build()
创建 UriComponent 的实例。方法。
案例#2
buildAndExpand(java.util.Map<java.lang.String,?> uriVariables)
,此方法构建 UriComponents 实例并用映射中的值替换 URI 模板变量。
在您的情况下,您的 map 包含
Map<String, Object> pathVariableMap = new HashMap<>();
pathVariableMap.put("var1", "var1");
pathVariableMap.put("var2", "var2");
当您像这样为 UriComponents 创建实例时,
String uri = UriComponentsBuilder.fromUriString(someUrl)
.path("/{var1}/path1/{var2}")
.buildAndExpand(pathVariableMap)
.toUriString();
所以,它将替换键 {var1}
的值 map 上的值 var1
。所以你的路径值就会变成这样 /var1/path1/var2
.
主要区别在于,使用 buildAndExpand()
非常有用。是它们的值仅限于特定元素。
例如:
这个buildAndExpand()
当我们想要将模型对象传递给 Spring Controller 时,我们将根据模型对象构建最终的 URI,这将非常有帮助。
欲了解更多信息,UriComponentsBuilder
关于java - 在 UriComponentsBuilder 中使用 Expand() 和直接添加值有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48108124/