欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springboot LocalDateTime 反序列化

程序员文章站 2022-11-15 21:24:24
springboot @RequestBody序列化LocalDateTime@RequestBody读取"yyyy-MM-dd HH:mm:ss"字符串,转换为LocalDateTime失败*******************示例***************pojo层Order@Datapublic class Order { private String orderId; @DateTimeFormat(patt......

springboot LocalDateTime 反序列化

 

@RequestBody读取pojo中LocalDateTime属性字段,字符串格式为"yyyy-MM-dd HH:mm:ss"时反序列化失败

 

 

*******************

示例

 

***************

pojo 层

 

Order

@Data
public class Order {

    private String orderId;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime orderTime;

    private Double price;
    private Integer amount;
}

 

***************

controller 层

 

HelloController

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime){
        System.out.println("hello ==> "+localDateTime);

        return "success";
    }

    @RequestMapping("/hello2")
    public String hello2(Order order){
        System.out.println("hello2 ==> "+order);

        return "success";
    }

    @RequestMapping("/hello3")
    public String hello3(@RequestBody Order order){
        System.out.println("hello3 ==> "+order);

        return "success";
    }
}

 

 

*******************

使用测试

 

***************

@RequestParam

 

localhost:8080/hello?localDateTime=2020-08-09 08:06:09

hello ==> 2020-08-09T08:06:09

 

localhost:8080/hello2?orderId=1&orderTime=2020-08-06 08:06:09&price=2&amount=8

hello2 ==> Order(orderId=1, orderTime=2020-08-06T08:06:09, price=2.0, amount=8)

@RequestParam可正常操作LocalDateTime数据

 

 

***************

@RequestBody

 

localhost:8080/hello3

header: Content-Type ==> application/json

body:

                springboot  LocalDateTime 反序列化

 

控制台输出

​
2020-07-16 17:33:54.416  WARN 10404 --- [nio-8080-exec-5] 
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved 
[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: 
Cannot deserialize value of type `java.time.LocalDateTime` from String "2020-08-09 
08:06:09": Failed to deserialize java.time.LocalDateTime: 
(java.time.format.DateTimeParseException) Text '2020-08-09 08:06:09' could not be parsed at 
index 10; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: 
Cannot deserialize value of type `java.time.LocalDateTime` from String "2020-08-09 
08:06:09": Failed to deserialize java.time.LocalDateTime: 
(java.time.format.DateTimeParseException) Text '2020-08-09 08:06:09' could not be parsed at 
index 10
 at [Source: (PushbackInputStream); line: 3, column: 18] (through reference chain: 
com.example.demo.pojo.Order["orderTime"])]
​

localDateTime反序列化失败,不能将2020-08-09 08:06:09转换为localDateTime

 

 

 

*******************

解决措施

 

***************

引入jar 包

 

        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
            <version>2.11.1</version>
        </dependency>

 

***************

pojo 层

 

Order

@Data
public class Order {

    private String orderId;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime orderTime;

    private Double price;
    private Integer amount;
}

使用@JsonFormat读取输入参数进行序列化

 

 

*******************

使用测试

 

localhost:8080/hello3

header: Content-Type ==> application/json

body:

                springboot  LocalDateTime 反序列化

 

控制台输出

hello3 ==> Order(orderId=2, orderTime=2020-08-09T08:06:09, price=2.0, amount=8)

 

 

本文地址:https://blog.csdn.net/weixin_43931625/article/details/107387865

相关标签: springboot