gpt4 book ai didi

java - Jackson ObjectMapper DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

转载 作者:搜寻专家 更新时间:2023-11-01 02:08:59 25 4
gpt4 key购买 nike

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

}

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

我不确定为什么这不起作用。我正在使用 jackson 1.9.2。

最佳答案

注意 ACCEPT_EMPTY_STRING_AS_NULL_OBJECT 的 javadoc

Feature that can be enabled to allow JSON empty String value ("") to be bound to POJOs as null.

因此,一个空的 String 可用于将 null 映射到 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

关于java - Jackson ObjectMapper DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22688713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com