Spring的UriComponentsBuilder如何规避java.net.URI的URISyntaxException?
如何用Spring的UriComponentsBuilder避免URISyntaxException已检查异常?
如果你一直在为java.net.URI构造方法强制要求捕获URISyntaxException而头疼,Spring提供的org.springframework.web.util.UriComponentsBuilder及其配套方法可以帮你彻底摆脱这个繁琐的已检查异常。
先看传统写法的痛点
用原生new URI()创建实例时,必须显式处理URISyntaxException,代码会显得很臃肿:
URI uri; try { uri = new URI(myUrl); } catch (URISyntaxException e) { // 必须在这里处理异常,哪怕只是打印日志或者抛出运行时异常 throw new RuntimeException("Invalid URI syntax", e); }
Spring的简洁解决方案
使用UriComponentsBuilder构建URI时,完全不需要处理已检查异常,代码清爽很多:
URI uri = UriComponentsBuilder.fromUriString(myUrl) .build() .toUri(); // 这里没有烦人的已检查异常!
为什么Spring的写法不需要处理已检查异常?
核心原因在于Spring内部已经把URISyntaxException包装成了未检查异常(具体是IllegalArgumentException,属于RuntimeException的子类)。当你传入的URL字符串存在语法问题时,build()或者toUri()方法会直接抛出这个未检查异常,你可以选择主动捕获它做自定义处理,也可以让它向上传播,不用像原生API那样强制编写try-catch块。
这种设计既保持了代码的简洁性,又没有丢失异常处理的灵活性——如果确实需要处理非法URI的场景,你依然可以捕获IllegalArgumentException来做针对性处理。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

