在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?为了便于阅读?
答案 0 :(得分:0)
从官方Spring Framework网站,build()
和buildAndExpand()
方法将根据参数执行不同的操作。
案例#1
它将从此构建器中包含的各种组件创建UriComponents实例。在你的情况下,组件就像someurl和path,这些组件将绑定在一起,并使用build()
方法创建UriComponent的实例。
案例#2
buildAndExpand(java.util.Map<java.lang.String,?> uriVariables)
,此方法构建一个UriComponents实例,并用地图中的值替换URI模板变量。
在您的情况下,您的地图包含
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}
的值替换为地图var1
中的值。因此,您的路径值将变为此/var1/path1/var2
。
主要区别在于,使用buildAndExpand()
是非常有用的,因为它们的值仅限于特定元素。
代表:
当我们想要将模型对象传递给Spring Controller时,这个buildAndExpand()
将非常有用,我们将根据它构建最终的URI。
有关详细信息,请UriComponentsBuilder