
Thymeleaf 的 param 对象始终以字符串数组形式返回查询参数,即使参数只含单个值;直接使用 ${param.xxx} 会输出数组对象地址,需通过索引(如 [0])访问具体值。
thymeleaf 的 `param` 对象始终以字符串数组形式返回查询参数,即使参数只含单个值;直接使用 `${param.xxx}` 会输出数组对象地址,需通过索引(如 `[0]`)访问具体值。
在 Thymeleaf 模板中,param 是一个内置上下文变量,用于访问 HTTP 请求的查询参数(query parameters)。但需特别注意:无论 URL 中某个参数出现一次还是多次,param.xxx 始终返回 String[] 类型——即字符串数组。因此,当您写:
<p th:text="${param.message}"></p>
Thymeleaf 实际渲染的是该数组对象的 toString() 结果(如 [Ljava.lang.String;@767a8ed5),而非其中的字符串内容。
✅ 正确做法是显式取数组首元素(假设参数非空):
<p th:text="${param.message[0]}">默认文案</p>
⚠️ 更健壮的写法(推荐):添加空值与长度校验,避免模板因 null 或空数组抛出异常:
<p th:text="${#arrays.length(param.message) > 0 ? param.message[0] : '未提供消息'}">默认文案</p>
或使用 Thymeleaf 的安全导航操作符(v3+ 更常用,但 v2.1.4 中不支持 ?.,故建议用 #arrays 工具类):
<!-- Thymeleaf 2.1.4 兼容写法 -->
<p th:if="${not #arrays.isEmpty(param.message)}" th:text="${param.message[0]}">
</p>
<p th:unless="${not #arrays.isEmpty(param.message)}">
消息参数为空
</p>
? 补充说明:
- 若 URL 含重复参数(如
?message=hello&message=world),param.message将返回["hello", "world"],此时[0]取第一个值,符合常见需求; - 如需拼接所有值,可用
#strings.join(param.message, ", "); - 升级至 Thymeleaf 3.x 后,语法更简洁(如支持
param.message.0或param.message?:'default'),但当前 v2.1.4 需严格按数组处理。
总结:永远把 param.xxx 当作数组对待,用 [0] + 工具类校验,即可安全、准确地渲染查询参数。










