groovy - 为什么jackson ObjectNode不真实?

时间:2013-07-12 16:06:49

标签: groovy jackson

为什么这个测试用例抛出异常“Node is not truthful”,即使它的大小是1?

package foo.bar

import grails.test.*

import org.codehaus.jackson.JsonFactory
import org.codehaus.jackson.JsonNode
import org.codehaus.jackson.map.ObjectMapper
import org.junit.Test

class MyTest{
    @Test
    void testJSonNode() {
        ObjectMapper mapper = new ObjectMapper(new JsonFactory())
        JsonNode node = mapper.readTree('{"foo":"bar"}')

        assert node.size() == 1
        assert node.iterator().hasNext() == true

        if (!node) {
            throw new Exception("Node is not truthful")
        }
    }
}

一些背景信息:

  1. 如果我将if (!node)更改为if (node == null)
  2. ,则不会抛出异常
  3. 我猜这是Groovy Truth
  4. 的问题
  5. node是org.codehaus.jackson.node.ObjectNode
  6. 的实例
  7. 以前用于org.codehaus.jackson:jackson-mapper-asl:1.6.5
  8. 我在org.codehaus.jackson中看到了这个问题:jackson-mapper-asl:1.9.11
  9. ObjectNode实现Iterable

1 个答案:

答案 0 :(得分:3)

JsonNode似乎定义了asBoolean() method,因此Groovy会调用它来确定对象的Groovy-truth值,而不是使用常规!= null测试。这种方法在1.9中声称是新的,这就是为什么1.6.5中的行为会有所不同。