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

Spring RequestBody无法正确解析datetime时区

梁骞仕
2023-03-14

我有一个简单的rest服务来存储时间范围,然而,Spring不能正确解析带有时区的datetime格式。

该实体是

@Data
@Entity
public class TimeRange {
@Setter(AccessLevel.NONE)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = true)
private LocalDateTime startTime;

@Column(nullable = true)
private LocalDateTime endTime;
}
@PostMapping(path = "/time", consumes = "application/json", produces = "application/json")
public Boolean setTime(@RequestBody TimeRange timeRange) {
    timeRangeRepository.save(timeRange);
    return true;
}
url = f'http://localhost/api/time'
data = {
  "startTime": "2019-12-03T19:58:29.047820+08:00",
  "endTime": "2019-12-04T19:58:29.047820+08:00"}
resp = requests.post(url, json=data, timeout=10)
pprint(resp.json())
 esolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: 
Cannot deserialize value of type `java.time.LocalDateTime` from String "2019-12- 

共有1个答案

吴胜涝
2023-03-14

您有一个带有偏移量的日期,如果您的所有日期的格式相同,您可以创建一个自定义反序列化程序,如下所示

public class CustomLocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
   private static final long serialVersionUID = 1L;

    public CustomLocalDateTimeDeserializer () {
        this(null);
    }

    protected CustomLocalDateTimeDeserializer (Class<?> vc) {
        super(vc);
    }

    @Override
    public LocalDateTime deserialize(JsonParser arg0, DeserializationContext arg1)
        throws IOException, JsonProcessingException {
        return LocalDateTime.parse(arg0.getValueAsString(), DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    }

}

并使用@jsondeserialize注释字段

@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime startTime;

@JsonDeserialize(using = CustomLocalDateTimeDeserializer.class)
private LocalDateTime endTime;

如果您想用相同的格式序列化您的日期,您必须创建一个自定义序列化程序

 类似资料:
  • 我正在尝试使用Java 8新的日期模式而不是Joda,我有以下问题: 两者都有 和 引发“Java . time . format . datetimeparseexception”异常。正在… 工作正常。 异常的原因是: Java . time . format . datetimeparseexception:无法在索引22处分析文本“02/05/16 11:51.12.083 04:30”

  • GSON不是在一开始就解析我传递的整个JSON字符串吗?因此,最终,我希望新的数据源是对象。那可行吗?

  • 我希望有人能帮我解决这个问题。 我想用WebClient创建一个Rest客户端,从API中检索响应。所以我创建了我的Spring项目,添加了webflux、lombok和h2。我还创建了一个DTO类“CashAccount”和以下方法: 当我使用“.bodyToMono(String.class)”时,所有的功能都很好,我收到了结果: 相反,当我使用“.bodyToMono(cashcount.c

  • 我不知道为什么我的json解析不起作用。这是我正在使用的Api。还有完整json输出的链接http://api.openweathermap.org/data/2.5/forecast/daily?zip=85008 我试图得到每天的最低和最高温度。这是我的代码。引发的异常应该是BEGIN_OBJECT,但在第1行第190列编号。任何帮助不胜感激,谢谢!

  • 这是我用来读取gradle项目中的application.properties文件的代码。 我的文件位于中 这就是我试图在IntelliJ中运行应用程序的方式

  • 在我的有效负载中,我得到了一个简单的文本,如下示例所示: 我尝试过一些类型也是DateTime,但没有成功的结果。 代码有什么问题?