在UriComponentsBuilder中使用expand()和直接添加值有什么不同?

4
在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?是为了可读性吗?
1个回答

2
从官方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来构建最终URI时,这个buildAndExpand()将非常有帮助。
更多信息,请参见UriComponentsBuilder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接