java null转换jason,如何将java.lang.String的空白JSON字符串值反序列化为null?

I am trying a simple JSON to de-serialize in to java object. I am however, getting empty String values for java.lang.String property values. In rest of the properties, blank values are converting to null values(which is what I want).

My JSON and related Java class are listed below.

JSON string:

{

"eventId" : 1,

"title" : "sample event",

"location" : ""

}

EventBean class POJO:

public class EventBean {

public Long eventId;

public String title;

public String location;

}

My main class code:

ObjectMapper mapper = new ObjectMapper();

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

try {

File file = new File(JsonTest.class.getClassLoader().getResource("event.txt").getFile());

JsonNode root = mapper.readTree(file);

// find out the applicationId

EventBean e = mapper.treeToValue(root, EventBean.class);

System.out.println("It is " + e.location);

}

I was expecting print "It is null". Instead, I am getting "It is ". Obviously, Jackson is not treating blank String values as NULL while converting to my String object type.

I read somewhere that it is expected. However, this is something I want to avoid for java.lang.String too. Is there a simple way?

解决方案

Jackson will give you null for other objects, but for String it will give empty String.

But you can use a Custom JsonDeserializer to do this:

class CustomDeserializer extends JsonDeserializer {

@Override

public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {

JsonNode node = jsonParser.readValueAsTree();

if (node.asText().isEmpty()) {

return null;

}

return node.toString();

}

}

In class you have to use it for location field:

class EventBean {

public Long eventId;

public String title;

@JsonDeserialize(using = CustomDeserializer.class)

public String location;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值