2014-09-04 43 views
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。

+0

傳SF 4.0和4.1。顯示,請問,關於此事的例外 – 2014-09-04 11:49:33

+0

我沒有得到一個異常,它似乎在引擎蓋'新的BigDecimal(「119000000000.000000」)'值被轉換爲一個數字,然後'intValue()'被稱爲apon它。 intValue()返回'-1259084288'的值。如果將BigDecimal值除以100,000,則該值將下降到int的有效範圍內,以便表達式通過。 – emeraldjava 2014-09-04 12:38:44

回答

相關問題