返回顶部
首页 > 资讯 > 后端开发 > Python >@JsonFormat处理LocalDateTime失效的问题
  • 675
分享到

@JsonFormat处理LocalDateTime失效的问题

2024-04-02 19:04:59 675人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录@JSONFORMat处理LocalDateTime失效@jsonFormat格式化LocalDateTime失败@JsonFormat处理LocalDateTime失效 Fai

@JsonFormat处理LocalDateTime失效

Failed to convert property value of type ‘java.lang.String’ to required type ‘localdatetime’ for property ‘time’ xxxx

api 请求参数中,通过需要用时间LocalDateTime,希望通过@JsonFormat() 处理时间格式:

@GetMapping("/user")
public UserDTO getUser(UserDTO name) {
    xxx
}
@Data
public class UserDTO {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    LocalDateTime time;
}

当我们通过get请求,通过表单的方式提交时,就会报上面按个转换异常参数;

解决:

方案一:改成请求体的方式提交,@RequestBody

    //get请求
    @GetMapping("/user")
    public UserDTO getUser(@RequestBody UserDTO name) {
    }
    // post 请求
    @PostMapping("/user")
    public UserDTO getUser(@RequestBody UserDTO name) {
    }

方案二:同时添加@DateTimeFormat()注解这个是spring提供的注解

@Data
public class UserDTO {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    LocalDateTime time;
}
  • @DateTimeFormat 用于将请求参数序列化
  • @JsonFormat() 将返回参数序列话

@JsonFormat格式化LocalDateTime失败

我们可以使用SpringBoot依赖中的@JsonFormat注解,将前端通过json传上来的时间,通过@RequestBody自动绑定到Bean里的LocalDateTime成员上。具体的绑定注解使用方法如下所示。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")

出现问题的版本

我使用Spring Boot 2.0.0 时,直接在字段上加上@JsonFormat 注解就可以完成数据的绑定。

而在使用Spring Boot 1.5.8时,只在字段上加上@JsonFormat 注解,在数据绑定时无法将Date类型的数据自动转化为字符串类型的数据。

解决:

1.将SpringBoot版本升级为2.0.0及以上。

2.如果不升级SpringBoot版本,可以按照下面的方式解决问题。

不升级SpringBoot版本,添加Jackson对Java Time的支持后,就能解决这个问题。

在pom.xml中添加:

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-parameter-names</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

添加JavaConfig,自动扫描新添加的模块:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;
 
@Configuration
public class JacksonConfig {
 
    @Bean
    public ObjectMapper serializinGobjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.findAndReGISterModules();
        return objectMapper;
    }
}

或者在application.properties添加如下配置:

spring.jackson.serialization.write-dates-as-timestamps=false

或者只注册JavaTimeModule,添加下面的Bean

@Bean
public ObjectMapper serializingObjectMapper() {
  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  objectMapper.registerModule(new JavaTimeModule());
  return objectMapper;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: @JsonFormat处理LocalDateTime失效的问题

本文链接: https://lsjlt.com/news/166149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作