2012-11-28 30 views
1

我有一些問題將傑克遜的加力燃燒模塊連接起來。下面的測試案例可以最好地總結這個問題。爲冗長的例子道歉;我試圖儘量縮短這個練習的時間。當您將註冊該模塊的行註釋掉並且在您離開時註冊失敗時,此測試將起作用。傑克遜2.0缺失節點的加力燃燒問題

我使用Jackson 2.1.1進行註釋,核心和加力燃燒。

我會很感激你可能有的想法。

謝謝!

上限

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 
import com.fasterxml.jackson.databind.JsonNode; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.module.afterburner.AfterburnerModule; 
import org.junit.Test; 

import java.io.IOException; 

import static org.junit.Assert.assertNotNull; 
import static org.junit.Assert.assertNull; 

public class AfterburnerTest { 

    @Test 
    public void mapOccupancyNoMaxAdults() throws IOException { 

     ObjectMapper objectMapper = new ObjectMapper(); 
     objectMapper.registerModule(new AfterburnerModule()); 

     final JsonNode node = objectMapper.readTree(
       "{" + 
        "\"max\":3," + 
        "\"adults\": {" + 
         "\"min\":1" + 
        "}," + 
        "\"children\":{" + 
         "\"min\":1," + 
         "\"max\":2" + 
        "}" + 
       "}"); 

     final Occupancy occupancy = objectMapper.reader(Occupancy.class).readValue(node); 

     assertNull(occupancy.getAdults().getMax()); 
     assertNotNull(occupancy.getChildren().getMax()); 


    } 

    @JsonIgnoreProperties(ignoreUnknown = true) 
    public static class Occupancy { 

     private Integer max; 
     private Guests adults; 
     private Guests children; 

     public Occupancy() { 
     } 

     public Occupancy(Integer max, Guests adults, Guests children) { 
      this.max = max; 
      this.adults = adults; 
      this.children = children; 
     } 

     public Integer getMax() { 
      return max; 
     } 

     public Guests getAdults() { 
      return adults; 
     } 

     public Guests getChildren() { 
      return children; 
     } 

    } 

    @JsonIgnoreProperties(ignoreUnknown = true) 
    public static class Guests { 

     private Integer min; 
     private Integer max; 

     public Guests() { 
     } 

     public Guests(Integer min, Integer max) { 
      this.min = min; 
      this.max = max; 
     } 

     public Integer getMin() { 
      return min; 
     } 

     public Integer getMax() { 
      return max; 
     } 

    } 

} 
+0

在我看來,這個測試通過傑克遜2.2.0和Afterburner模塊。也許你遇到的潛在問題已經解決了? – StaxMan

回答

-1

我有我解決了這樣一個類似的問題:

新AfterburnerModule()setUseOptimizedBeanDeserializer(假)

的問題是,也許正因爲如此,我看到加力燃燒器沒有性能改進...

0

我可以嘗試看看你得到了什麼錯誤,但值得注意的一件事是Afterburner通常無法幫助基於樹模型的訪問速度過快。爲什麼?因爲那些不使用基於反射的getter/setter訪問,所以沒有太多優化。

在您的示例代碼中,應該爲第二部分(從樹模型轉換爲POJO)進行一些加速,因爲它會經歷常規訪問。只是不適合第一部分。