日期: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注解就是解决前后端数据格式不一致的问题的。