1
我們使用Spring Expression Language(v3.1.2)來驗證地圖中的Object值。下面的兩個測試用例概述了我們斷言BigDecimal對象的值的場景。第一個案例通過但第二個測試失敗。我認爲我們定義表達式的方式是更正,但懷疑實現不能正確地轉換對象值。Spring SpEL和BigDecimal表達式
@Test
public void testBigDecimalValueLess() {
Map<String,Object> map = new HashMap<String,Object>();
map.put("premiums",new BigDecimal("400000.000000"));
StandardEvaluationContext stdContext = new StandardEvaluationContext();
stdContext.setVariables(map);
// Set expression
String ruleExpression = "#premiums>=new java.math.BigDecimal('500000')";
// Evaluate the SpEL expression
ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression(ruleExpression);
Boolean returnValue = expression.getValue(stdContext,Boolean.class);
Assert.assertEquals(Boolean.FALSE,returnValue);
}
@Test
public void testBigDecimalValueGreater() {
Map<String,Object> map = new HashMap<String,Object>();
map.put("premiums",new BigDecimal("119000000000.000000"));
StandardEvaluationContext stdContext = new StandardEvaluationContext();
stdContext.setVariables(map);
// Set expression
String ruleExpression = "#premiums>=new java.math.BigDecimal('500000')";
// Evaluate the SpEL expression
ExpressionParser parser = new SpelExpressionParser();
Expression expression = parser.parseExpression(ruleExpression);
Boolean returnValue = expression.getValue(stdContext,Boolean.class);
Assert.assertEquals(Boolean.TRUE,returnValue);
}
是否有任何推薦的方法可以在currect版本上完成此操作。我可以將額外信息 傳遞給StandardEvaluationContext對象嗎?
編輯1
我寫這個測試顯示的BigDecimal值是如何轉換爲「廉政」和「長」
@Test
public void bigDecimalIntValue(){
System.out.println(new BigDecimal("1000").intValue());
System.out.println(new BigDecimal("100000").intValue());
System.out.println(new BigDecimal("10000000").intValue());
System.out.println(new BigDecimal("1000000000").intValue());
System.out.println(new BigDecimal("100000000000").intValue()); --> 1215752192
System.out.println(new BigDecimal("100000000000").longValue()); --> 100000000000
System.out.println(new BigDecimal("713027290000.000000").intValue()); --> 62718864
System.out.println(new BigDecimal("713027290000.000000").longValue()); --> 713027290000
}
我懷疑我只需要確保自己的表情蒙上兩個號碼評估操作之前的Long。
傳SF 4.0和4.1。顯示,請問,關於此事的例外 – 2014-09-04 11:49:33
我沒有得到一個異常,它似乎在引擎蓋'新的BigDecimal(「119000000000.000000」)'值被轉換爲一個數字,然後'intValue()'被稱爲apon它。 intValue()返回'-1259084288'的值。如果將BigDecimal值除以100,000,則該值將下降到int的有效範圍內,以便表達式通過。 – emeraldjava 2014-09-04 12:38:44