用Swagger/Postman传时间date或time数据类型的传参方法

606 阅读1分钟

日期:2022年5月10日

出处:尚硅谷_谷粒学苑-微服务+全栈在线教育实战项目

正文


问题描述

今天在测试新增航班信息接口,测试传输json数据如图:

出现了以下问题的报错

主要报错信息

org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Expected array or string.; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Expected array or string.

at [Source: (PushbackInputStream); line: 4, column: 14] (through reference chain: com.domestic.planeservice.entity.Flight["endTime"])


Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Expected array or string.

at [Source: (PushbackInputStream); line: 4, column: 14] (through reference chain: com.domestic.planeservice.entity.Flight["endTime"])

... 51 more


简单点就是说我们写的传输json格式不对,编译器识别不了

解决方案

添加 @JsonFormat 注解

注意是以下这个类,别导错了

import com.fasterxml.jackson.annotation.JsonFormat;

里面配置所需数据格式,如下代码

    //飞行日期
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date flightDate;

    @JsonFormat(pattern = "HH:mm:ss")
    private LocalTime startTime;

    @JsonFormat(pattern = "HH:mm:ss")
    private LocalTime endTime;

运行测试

rerun启动类

然后根据注解格式修改所需要传输的json数据,示例如下图

注意:一定要严格按照 @JsonFormat注解后面的数据格式来写,不然还会报错

报错示例

这个报错就是因为“3:00:00”没有按照“HH:MM:SS”来写,正确写法应该是“03:00:00”

拓展

@JsonFormat注解

@JsonFormat注解可以解决后台到前台数据格式保持一致

@DateTimeFormat注解

@DateTimeFormat注解可以将一个字符串转成一个Date对象

总结


每个错误往往伴随着陌生的知识点,这次我就新学了两个新的注解@JsonFormat,@DateTimeFormat,重点就是这两个注解,总的来说@JsonFormat注解就是你自定义一个规范的传输格式,@DateTimeFormat注解就是解决前后端数据格式不一致的问题的。