当前位置: 首页 > 知识库问答 >
问题:

如何在lamda流反序列化过程中忽略空值?

郭兴文
2023-03-14

我有getter方法

@JsonInclude(Include.NON_NULL)
public Date getVerifiedFrom() {
    if(invoices == null || invoices.isEmpty()) {
       return null;
    }
    return invoices.stream().filter(i->i.getVerifiedDate() != null).map(Invoice::getVerifiedDate).min(Date::compareTo).get();
}

我尝试了几个链接,但这些都没有帮助,

http://www.java2novice.com/java-json/jackson/ignore-json-null-elements/

如何用JsonFormat反序列化Jackson Json空字符串到日期

如何告诉Jackson在序列化期间忽略一个字段,如果它的值为空?

错误:

Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: No value present; 
nested exception is com.fasterxml.jackson.databind.JsonMappingException: No value present (through reference chain: java.util.ArrayList[0]->com.enkindle.service.resource.TradeDebtResource["verifiedFrom"])

共有1个答案

昌博易
2023-03-14

您得到的异常是由于流为空,这导致min返回一个空的可选项,当您调用get时,该可选项会引发异常。你没有得到原始NPE的原因是Jackson可能只是摘录了消息。

您应该将get()替换为orelse(null)。还有一个Jackson模块处理optional

 类似资料:
  • 我的控制器接收到的JSON数据如下: 问题是对象“ContainedObject”被解释为是,并且它正在被实例化。因此,只要我的控制器读取这个JSON数据,它就会生成一个ContainedObject对象类型的实例,但我需要它为空。 最简单、最快的解决方案是,在接收的JSON数据中,该值为空,如下所示: 我的实体类如下: 和包含的对象类,如下所示:

  • 我尝试将以下json反序列化为java POJO。 我使用jackson 2.8.6 但我不断得到以下例外情况: 如果我为它添加一个字符串设置器 摘要:一些(设计错误的)API发送给我的是空字符串()而不是,我不得不告诉Jackson忽略这个错误的值。我怎么能这么做?

  • 问题内容: 在反序列化过程中(据我了解,这是将JSON数据转换为Java对象的过程),我如何告诉Jackson,当它读取不包含数据的对象时,应该忽略它吗? 我正在使用Jackson 2.6.6和Spring 4.2.6 我的控制器收到的JSON数据如下: 问题是对象“ containedObject”按原样解释,并且正在实例化。因此,控制器读取此JSON数据后,它将立即生成ContainedObj

  • 问题内容: 我有一个简单的接口与属性的getter和setter。 我还有另一个实现此接口的UserAccount类。 我的问题是我想序列化money属性,但在反序列化它时忽略它,即,不接受用户对此属性的任何值。我在setter上尝试过@JsonIgnore,在getter上尝试过@JsonIgnore(false),它确实会忽略它,但是在序列化它时也会这样做。 我在setter上尝试了@Json

  • 我有另一个类UserAccount实现了这个接口。 我的问题是,我想序列化money属性,但在反序列化时忽略它,即不接受用户对该属性的任何值。我在setter上尝试了@jsonIgnore,在getter上尝试了@jsonIgnore(false),它确实忽略了它,但是它在序列化它的同时也忽略了它。 我在setter上尝试了@jsonIgnore,在getter上尝试了@jsonProperty,

  • 问题内容: 在反序列化过程中(据我了解,这是将JSON数据转换为Java对象的过程),我如何告诉杰克逊,当它读取不包含数据的对象时,应将其忽略吗? 我正在使用Jackson 2.6.6和Spring 4.2.6 我的控制器收到的JSON数据如下: 问题是对象“ containedObject”按原样解释,并且正在实例化。因此,一旦我的控制器读取此JSON数据,它就会生成ContainedObjec