Jackson ObjectMapper DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

我在Jersey应用程序中使用Jackson进行JSON序列化/反序列化。 我想在我的java POJO属性中将JSON中的空字符串读取为null值。 我试图在Object Mapper上设置DeserializationConfig.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(); } } } 

豆子如下

 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 

我不知道为什么这不起作用。 我正在使用Jackson 1.9.2。

请注意ACCEPT_EMPTY_STRING_AS_NULL_OBJECT的javadoc

可以启用的function允许JSON空字符串值(“”)绑定到POJO为null。

因此,可以使用空Stringnull映射到POJO。 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