Java Jackson ObjectMapper反序列化config.Feature.ACCEPT_EMPTY_STRING_作为_NULL_对象

Java Jackson ObjectMapper反序列化config.Feature.ACCEPT_EMPTY_STRING_作为_NULL_对象,java,json,jackson,json-deserialization,Java,Json,Jackson,Json Deserialization,我正在Jersey应用程序中使用Jackson进行JSON序列化/反序列化。我想将JSON中的空字符串读取为java POJO属性中的null值。我试图在对象映射器上将反序列化config.Feature.ACCEPT\u EMPTY\u STRING\u设置为\u NULL\u对象,但它不起作用。下面是代码 import java.io.IOException; import org.codehaus.jackson.JsonParseException; import org.codehau

我正在Jersey应用程序中使用Jackson进行JSON序列化/反序列化。我想将JSON中的空字符串读取为java POJO属性中的null值。我试图在对象映射器上将反序列化config.Feature.ACCEPT\u EMPTY\u STRING\u设置为\u NULL\u对象,但它不起作用。下面是代码

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

注意

允许将JSON空字符串值(“”)作为null绑定到POJO的功能

因此,可以使用空的
字符串
null
映射到POJO。
字符串
不是POJO,它被视为JSON原语值

你不能在这里用这个

接受\u空\u字符串\u作为\u空\u对象

{"name":"First Name","phone":"","unknown":"test"}
在这里,您可以创建一些POJO类型的
TestBean.phone
字段,如

class Phone {
    private String number;
}

然后反序列化将使
phone
字段变为
null

您是否调试了它并查看了phone中的值?我也遇到了同样的问题,有什么解决方案吗?我正在使用Jackson 1.9。有什么方法可以实现我想要做的吗?@user2957698,据我所知还没有。而你可能不应该。(可能会修复服务器以返回不同的JSON)。或者,在反序列化之后,您可以使用helper函数检查
字符串是否为空或
null