- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经看了很多,但到目前为止仍然无法得到答案,非常感谢任何帮助!
我有一个简单的 String
至 Date
字段映射并尝试将 JSON 字符串读取到 Java 对象。
@JsonInclude(value=Include.NON_EMPTY)
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd-MMM-yyyy", timezone="PST")
protected Date eolAnnounceDate;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(Include.NON_NULL);
objectMapper.setSerializationInclusion(Include.NON_EMPTY);
java.lang.IllegalArgumentException: Failed to parse Date value 'NULL' (format: "dd-MMM-yyyy"): Unparseable date: "NULL" com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateBasedDeserializer._parseDate(DateDeserializers.java:180) com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:279) com.fasterxml.jackson.databind.deser.std.DateDeserializers$DateDeserializer.deserialize(DateDeserializers.java:260) com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:464) com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98) com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295) com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:230) com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:207) com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23) com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:464) com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98) com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295) com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) com.cisco.cre.dao.impl.ElasticsearchDAOImpl.getListByIdsFilter(ElasticsearchDAOImpl.java:94)
最佳答案
您的问题不是在 JSON 中传递了空值。问题在于 JSON 包含一个值为 "NULL"
的字符串。 .
因此,为了解决这个问题,有许多可用的方法。我认为以下两个将适用于这种情况。
备选方案 1:修复 JSON
第一个选择是修复 JSON,使其不包含字符串值 "NULL"
而是包含值 null
(未引用)或干脆跳过它。
想象一下以下 POJO:
public class DatePojo {
@JsonInclude(value= JsonInclude.Include.NON_EMPTY)
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd-MMM-yyyy", timezone="PST")
@JsonProperty("date")
private Date date;
}
null
值(value)观工作:
@Test
public void testJson() throws IOException {
String jsonWithValidDate = "{\"date\":\"12-Jun-1982\"}";
String jsonWithNoDate = "{}";
String jsonWithNullDate = "{\"date\":null}";
ObjectMapper mapper = new ObjectMapper();
final DatePojo pojoWithValidDate = mapper.readValue(jsonWithValidDate, DatePojo.class);
final DatePojo pojoWithNoDate = mapper.readValue(jsonWithNoDate, DatePojo.class);
final DatePojo pojoWithNullDate = mapper.readValue(jsonWithNullDate, DatePojo.class);
Assert.assertNotNull(pojoWithValidDate.date);
Assert.assertNull(pojoWithNoDate.date);
Assert.assertNull(pojoWithNullDate.date);
}
"NULL"
测试失败,因为
"NULL"
无法解析为日期:
@Test(expected = JsonMappingException.class)
public void testInvalidJson() throws IOException {
String jsonWithNullString = "{\"date\":\"NULL\"}";
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonWithNullString, DatePojo.class); // Throws the exception
Assert.fail();
}
"NULL"
public class DatePojo {
@JsonProperty("date")
@JsonDeserialize(converter = MyDateConverter.class)
private Date date;
}
public class MyDateConverter extends StdConverter<String, Date> {
@Override
public Date convert(final String value) {
if (value == null || value.equals("NULL")) {
return null;
}
try {
return new SimpleDateFormat("dd-MMM-yyyy").parse(value);
} catch (ParseException e) {
throw new IllegalStateException("Unable to parse date", e);
}
}
}
@Test
public void testJson() throws IOException {
String jsonWithValidDate = "{\"date\":\"12-Jun-1982\"}";
String jsonWithNoDate = "{}";
String jsonWithNullDate = "{\"date\":null}";
String jsonWithNullString = "{\"date\":\"NULL\"}"; // "NULL"
ObjectMapper mapper = new ObjectMapper();
final DatePojo pojoWithValidDate = mapper.readValue(jsonWithValidDate, DatePojo.class);
final DatePojo pojoWithNoDate = mapper.readValue(jsonWithNoDate, DatePojo.class);
final DatePojo pojoWithNullDate = mapper.readValue(jsonWithNullDate, DatePojo.class);
final DatePojo pojoWithNullStr = mapper.readValue(jsonWithNullString, DatePojo.class); // Works
Assert.assertNotNull(pojoWithValidDate.date);
Assert.assertNull(pojoWithNoDate.date);
Assert.assertNull(pojoWithNullDate.date);
Assert.assertNull(pojoWithNullStr.date); // Works
}
关于json - 如何使用 JsonFormat 反序列化 Jackson Json NULL 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28123887/
我的代码是: final String json = getObjectMapper().writeValueAsString(JsonView.with(graph) .onClas
我的应用程序无法格式化日期输入。我正在使用 com.fasterxml.jackson.annotation.JsonFormat Json 输入: "startDate": "2019-08-07"
我有一个自定义对象: public class Response { @JsonProperty("values") private List values; @JsonFor
目录 @JsonFormat 日期格式自动格式化 例如,某个类里面有个属性 @JsonFormat时间格式化注解使用
如何为引用自身的案例类提供 JsonFormats? 我正在关注 this 指南并编写了以下代码 case class Item(name: String, desc: Option[String],
我试图在这里找到一些帮助来应用 DefaultJsonProtocol 的 JsonFormat 扩展 到包含对象序列的类。 所以对于类(class): class Person(val name:
我有一个只有一个字段的类: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", t
我正在尝试为抽象类编写一个 JsonFormat,它的通用参数看起来像这样: abstract class Animal[A] { def data: A def otherStuff
我有一些特殊的业务,需要一个自定义序列化器,它在修改 DictAnnotation 注释的字段中添加一个字段,它可以工作。 但 @JsonFormat 不起作用。我的 createTime 字段曾经是
我有一个包含可变参数的案例类,其隐式 jsonFormat 如下: import spray.json._ case class Colors(name: String*) object MyJson
我有一个非常简单的 bean: public class StatusBean { private String name; @JsonFormat(shape=JsonFormat.Shape.
我有一个简单的 POJO,带有一个带有初始值的 Date 字段: 1985-09-17T01:00:00.000+0400 然后这个日期值被映射到带有注释的日期字段的 DTO: @JsonFormat
我通过这篇文章学习了如何一起使用 Json 和 java.util.Optional: https://medium.com/@harittweets/how-to-use-java-util-opt
今天在线上发现一个问题,在使用Jackson进行时间的反序列化时,配置的 @JsonFormat 没有生效 查看源码发现,Jackson在反序列化时间时,会判断json字段值类型,如下: 由
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSS") 是否可以用模式编写正则表达式?我不
我有一个来自 JSON 有效负载的值: "callStartTime" : "2019-03-27 13:00:00" 实体.java @JsonProperty("callStartTime") @
我在我的项目中使用了 Spring Date Rest 和 Spring Boot。 这个项目有一个对象,我使用了 @JsonFormat 注释来格式化将从我的 Json 接收到的日期字段。 字段日期
我有一个生成的java类: package cc.notsoclever.customerservice public class Customer { protected String name
我有一个用秒部分定义的字段(即:“ss”),如下所示 @JsonProperty("date") @JsonFormat(shape = JsonFormat.Shape.STRING, patter
我有一个通用表单字段类 public class FormField { private T value; private boolean disabled; // setters
我是一名优秀的程序员,十分优秀!