WARN OgnlValueStack:68 - Error setting value [[Ljava.lang.String;@1597a48] with expression [1429250952505]
java.lang.NumberFormatException: For input string: "1429250952505"
at java.lang.Integer.parseInt(Integer.java:495)
at ognl.OgnlParserTokenManager.makeInt(OgnlParserTokenManager.java:63)
Struts2 OGNL 表達式解析器嘗試將請求參數 1429250952505(時間戳毫秒數)轉換為 Integer,但該數值 **超過 `Integer.MAX_VALUE (2,147,483,647)`**,導致解析失敗。
img.src = ".../checkImage.action?" + new Date().getTime(); 生成 13 位毫秒級時間戳。int,溢出拋異常。function changeImage() {
var img = document.getElementById("checkImage");
img.src = "${pageContext.request.contextPath}/checkImage.action?" + Math.floor(Date.now() / 1000);
}
10 位秒級時間戳(如 1429250952)在 Integer 範圍內,OGNL 可正常解析。
img.src = ".../checkImage.action?t=" + Date.now(); // 帶參數名 t=,OGNL 視為普通屬性賦值
對應 Action 添加 private Long t; // 或 String t 接收即可,不參與表達式求值。
// struts.xml
// 關閉轉換錯誤攔截(不推薦)
// 或註冊 Long 類型轉換器
public class LongConverter extends StrutsTypeConverter {
public Object convertFromString(Map context, String[] values, Class toClass) {
return Long.parseLong(values[0]);
}
public String convertToString(Map context, Object o) { return o.toString(); }
}
?t=xxx),避免無名參數被 OGNL 誤解析。Long/String 接收大數字,不要用 int。Kaptcha, Google reCAPTCHA),而非手寫 Servlet。修改 JS 為秒級或帶參數名,即可徹底解決此報錯,無需動後端代碼。