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

时间:2018-01-05 06:10:16

标签: java spring web

在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 个答案:

答案 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