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

标签 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?为了可读性?

最佳答案

来自官方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/

相关文章:

java - 使用 BeanUtils.getProperty() 时出现未知属性错误

spring - 找不到插件 : jpa

HTML:如何立即重定向页面?

javascript - HTML 段落没有变成一条直线

java - Spring webapp - 在应用程序停止时关闭线程

ios - 单独的用户类 [解析]

java - 如何将此 JSON 响应解析为 POJO

java - if 和 else 语句存在很多问题

java - Android:如何创建空 Realm 对象?

java - Spring @RequestMapping 重定向到带有附加信息的相同路径