自定义日期字符串使用杰克逊JsonFormat模式

弗雷德·克劳森:

摘要

我试图解析的日期,如25/Sep/17因此SimpleDateFormat的注释似乎是@JsonFormat(pattern = "dd/MMM/yy")然而,当我尝试分析这个,我得到一个InvalidFormatException其中的本质是(下面的例子经过充分的除外):

Text '25/Sep/17' could not be parsed at index 3

有什么不对我的日期格式字符串?我看不出任何问题。它看起来像它不喜欢的Sep搭配MMM

我使用亚马逊Corretto Java版本“11.0.5” 2019年10月15日LTS

实施例来重现

package example;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import java.time.LocalDate;

public class HelloMapperApp {
  private static final ObjectMapper MAPPER = new ObjectMapper();

  public static void main(String[] args) {
    MAPPER.registerModule(new JavaTimeModule());
    try {
      Example example = MAPPER.readValue("{ \"name\": \"example\", \"date\": \"25/Sep/17\"", Example.class);
      System.out.println("Deserialised is: " + example);
    } catch (Exception e) {
      throw new RuntimeException("Could not parse JSON: " + e);
    }
  }

  static class Example {
    @JsonProperty
    String name;
    @JsonProperty
    @JsonFormat(pattern = "dd/MMM/yy")
    LocalDate date;

    @Override
    public String toString() {
      return String.format("name: %s%ndate: %s", name, date);
    }
  }
}

全异常

Exception in thread "main" java.lang.RuntimeException: Could not parse JSON: com.fasterxml.jackson.databind.exc.InvalidFormatException: 
Cannot deserialize value of type 
`java.time.LocalDate` from String "25/Sep/17": Failed to deserialize java.time.LocalDate: 
(java.time.format.DateTimeParseException) Text '25/Sep/17' could not be parsed at index 3
 at [Source: (String)"{ "name": "example", "date": "25/Sep/17""; line: 1, column: 30] (through reference chain: example.HelloMapperApp$Example["date"])
        at example.HelloMapperApp.main(HelloMapperApp.java:19)
akuzminykh:

这可能是给定的输入有由格式所使用的语言环境的格式不正确的情况。是一个类似的帖子里有人有一个问题Sep格式化预计其中Sep.Locale.CANADA

在这里,并在这里你可以看看如何设置格式的语言环境。例如:

@JsonFormat(locale = "en", pattern = "dd/MMM/yy")

FYI:您不需要使用LLL数月为文本。有一看DateTimeFormatter

号码/文字:如果模式字母的数量为3或更大,使用上面的文字规定。否则,使用上面的编号规则。

当您使用MMM,即三次M,格式化将隐式使用文本格式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是杰克逊系列化此字符串可能没有自定义序列?

杰克逊:解析自定义偏移日期时间

使用杰克逊反序列化包含@JsonFormat(shape = JsonFormat.Shape.ARRAY)和自定义对象的json

地图字符串使用杰克逊继承对象

如何使用杰克逊遍历生成的JSON模式并将自定义属性放入JSON模式

杰克逊使用自定义日期格式错误地反序列化Joda日期

如何自定义序列化杰克逊日期,@JsonSerialize不工作

杰克逊自定义日期序列化器

如何提供与杰克逊和Spring启动自定义解串器

杰克逊:如何使@JsonBackReference和自定义解串器同时工作?

杰克逊中用于枚举的自定义xml解串器

杰克逊自定义解串器未调用

转换JSON记录到LinkedHashMap的<字符串,字符串>使用杰克逊API

杰克逊自定义序列化对象

自定义值序列杰克逊定制的注解

杰克逊,将字符串反序列化为日期

杰克逊日期格式问题:Java bean到JSON字符串转换

使用杰克逊的对象数组的自定义序列化器

使用杰克逊可自定义序列化和反序列化

杰克逊使用其他字段的哈希值添加自定义字段

无法获取jersey 2应用程序以使用自定义杰克逊XmlMapper

杰克逊解析字符串字段作为JSON

杰克逊读值作为字符串

杰克逊JsonNode字符串与排序键

杰克逊将字符串转换为对象

杰克逊ObjectCodec字符串json

如何通过杰克逊进行字符串验证?

杰克逊@JsonFormat转换日期不正确的时区

反序列化使用杰克逊的字符串或对象