2014-03-27 321 views
2

我在Jersey應用程序中使用Jackson進行JSON序列化/反序列化。我想在我的Java POJO屬性中將JSON中的空字符串讀取爲空值。我試圖在Object Mapper上設置DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,但它不起作用。這裏是低於Jackson對象映射器反序列化配置.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

import java.io.IOException; 
import org.codehaus.jackson.JsonParseException; 
import org.codehaus.jackson.map.DeserializationConfig; 
import org.codehaus.jackson.map.JsonMappingException; 
import org.codehaus.jackson.map.ObjectMapper; 

public class TestMapper { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     TestMapper.testJson(); 

    } 

    public static void testJson(){ 
     String jsonString = "{\"name\":\"First Name\",\"phone\":\"\",\"unknown\":\"test\"}"; 
     ObjectMapper result = new ObjectMapper(); 
     //result.setDeserializationConfig(result.getDeserializationConfig().with(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)); 
     //result.enable(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT); 
     /*DeserializationConfig deserializeConfig = result.getDeserializationConfig(); 
     deserializeConfig.with(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);*/ 
     result.configure(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); 
     result.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 

    try { 
      TestBean testBean = result.readValue(jsonString, TestBean.class); 
      if(testBean.getPhone()!=null&& testBean.getPhone().equals("")){ 
       System.out.print("Phone Number is empty string"); 
      }else{ 
       System.out.print("Phone Number is null"); 
      } 
     } catch (JsonParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

代碼的bean是如下

public class TestBean { 

    private String name; 
    private String phone; 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getPhone() { 
     return phone; 
    } 
    public void setPhone(String phone) { 
     this.phone = phone; 
    } 
    public TestBean(String name, String phone) { 
     super(); 
     this.name = name; 
     this.phone = phone; 
    } 
    public TestBean() { 
     super(); 
    } 


} 

輸出始終

Phone Number is empty string 

我不知道這是爲什麼不工作。我正在使用傑克遜1.9.2。

+0

你有沒有調試過,看看手機有什麼價值? – Jay

+0

是的值是「」 – user2957698

+0

我有同樣的問題,任何解決方案?我正在使用傑克遜1.9 –

回答

3

注意,可經啓用以允許JSON空字符串值ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

特徵的Javadoc(「」)被綁定到的POJO爲空。

因此,空的String可用於將null映射到POJO。 A String不是POJO,它被認爲是JSON原始值。

你不能在這裏使用。

ACCEPT_EMPTY_STRING_AS_NULL_OBJECT將工作像

{"name":"First Name","phone":"","unknown":"test"} 

在哪裏,你會做出一些POJO類的TestBean.phone場像

class Phone { 
    private String number; 
} 

然後反序列化會使得phone場是null

+3

有沒有辦法實現我想要做的事情? – user2957698

+0

@ user2957698並不如我所知。而你可能不應該。 (可能修復您的服務器以返回不同的JSON)。或者,在反序列化之後,你可以使用一個輔助函數來檢查'String'是否爲空或'null'。 –

+0

我遇到同樣的問題,對此有何解決方案?我正在使用傑克遜1.9 –