无法从 JSON 对象的 DTO 中找到数据 - 解析错误 ZonedDateTime
Unable to find data in DTO from JSON object - parsing error ZonedDateTime
我正在尝试将 JSON 时间戳对象转换为 Java
我研究过将 JSON 字符串转换为 java,但不确定我在寻找什么。
如果 JSON 使用数组,我可以让它工作,但不幸的是它不使用这种方法。
JSON 有效载荷
{
"type": "RFID-read",
"event": {
"id": "3892fec6-9246-4699-ba86-99ab1df369a9",
"timestamp": "2020-11-19T15:01:11.391+0000",
"deviceId": "FX9600FB2D21",
"data": {
"format": "epc",
"id": "000000000000000000000115",
"reads": 1,
"rssi": -72,
"antennaId": "1"
}
},
"analytics": {
"tenant": "73876942a20c12550f996b2152e5ca9e",
"resourceId": "000000000000000000000115",
"location": "FX9600FB2D21",
"timestamp": "2020-11-19T15:01:11.391+0000",
"meta": {
"type": "inventory"
}
}
}
事件 DTO
@Data
@Builder(toBuilder = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ZebraEventReadsDto {
private String id;
private ZonedDateTime timestamp;
@NotNull
@Size(min = 1, max = 100)
private String deviceId;
private String format;
ZebraDataReadsDto data;
更新 DTO
@Data
@Builder(toBuilder = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ZebraLocationUpdateDto {
private String type;
ZebraEventReadsDto event;
public static List<LocationUpdateDom> toDomainModel(ZebraLocationUpdateDto zebraLocationUpdateDto) {
List<LocationUpdateDom> locationUpdateDomList = new ArrayList<>();
locationUpdateDomList.add(LocationUpdateDom.builder()
.deviceName(zebraLocationUpdateDto.zebraEventReadsDto.getDeviceId())
.dateTime(zebraLocationUpdateDto.zebraEventReadsDto.getTimestamp())
.tagId(zebraLocationUpdateDto.zebraEventReadsDto.data.getId())
.latLng(Optional.empty())
.build());
return locationUpdateDomList;
}
}
为了解决解析错误,我在时间戳变量上方使用了以下注释。
@JSONFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
private ZonedDateTime timestamp;
我现在可以了 return 200 OK
我正在尝试将 JSON 时间戳对象转换为 Java
我研究过将 JSON 字符串转换为 java,但不确定我在寻找什么。 如果 JSON 使用数组,我可以让它工作,但不幸的是它不使用这种方法。
JSON 有效载荷
{
"type": "RFID-read",
"event": {
"id": "3892fec6-9246-4699-ba86-99ab1df369a9",
"timestamp": "2020-11-19T15:01:11.391+0000",
"deviceId": "FX9600FB2D21",
"data": {
"format": "epc",
"id": "000000000000000000000115",
"reads": 1,
"rssi": -72,
"antennaId": "1"
}
},
"analytics": {
"tenant": "73876942a20c12550f996b2152e5ca9e",
"resourceId": "000000000000000000000115",
"location": "FX9600FB2D21",
"timestamp": "2020-11-19T15:01:11.391+0000",
"meta": {
"type": "inventory"
}
}
}
事件 DTO
@Data
@Builder(toBuilder = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ZebraEventReadsDto {
private String id;
private ZonedDateTime timestamp;
@NotNull
@Size(min = 1, max = 100)
private String deviceId;
private String format;
ZebraDataReadsDto data;
更新 DTO
@Data
@Builder(toBuilder = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ZebraLocationUpdateDto {
private String type;
ZebraEventReadsDto event;
public static List<LocationUpdateDom> toDomainModel(ZebraLocationUpdateDto zebraLocationUpdateDto) {
List<LocationUpdateDom> locationUpdateDomList = new ArrayList<>();
locationUpdateDomList.add(LocationUpdateDom.builder()
.deviceName(zebraLocationUpdateDto.zebraEventReadsDto.getDeviceId())
.dateTime(zebraLocationUpdateDto.zebraEventReadsDto.getTimestamp())
.tagId(zebraLocationUpdateDto.zebraEventReadsDto.data.getId())
.latLng(Optional.empty())
.build());
return locationUpdateDomList;
}
}
为了解决解析错误,我在时间戳变量上方使用了以下注释。
@JSONFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
private ZonedDateTime timestamp;
我现在可以了 return 200 OK