我的问题是我需要将我的json响应从服务器反序列化为java对象,但问题是反序列化后,set字段中只有null。从服务器的答案检查了填写的字段来。我做错了什么,如何解决?谢谢你的帮助
这是我的方法服务
public ReportDataFromReporter getReports(int weekNumber, int year) throws JsonProcessingException {
LocalDate mondayOfWeek = LocalDate.of(year, Month.JUNE, 1)
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
.with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, weekNumber);
LocalDate sundayOfWeek = mondayOfWeek.plusDays(6);
String url = "example.com";
ObjectMapper objectMapper = new ObjectMapper()
.registerModule(new JavaTimeModule());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
objectMapper.setDateFormat(dateFormat);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
ObjectForRequestToReporter objectForRequestToReporter = new ObjectForRequestToReporter();
objectForRequestToReporter.setToken(userService.getUser().getReporterToken());
objectForRequestToReporter.setEmployee(userService.getUser().getLogin());
objectForRequestToReporter.setFrom(mondayOfWeek);
objectForRequestToReporter.setTo(sundayOfWeek);
String jsonObject = objectMapper.writeValueAsString(objectForRequestToReporter);
System.out.println(jsonObject);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
httpHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(jsonObject, httpHeaders);
String reporterResponse = restTemplate.postForObject(url, entity, String.class);
ReportDataFromReporter reportDataFromReporter = objectMapper
.readValue(reporterResponse, ReportDataFromReporter.class);
System.out.println(reportDataFromReporter);
return reportDataFromReporter;
这是我需要反序列化的Java对象
@Data
public class ReportDataFromReporter {
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate day;
private Integer hours;
private String description;
private Long project;
private Long taskType;
private Long work_after;
}
JSON中的外部API的响应
{
"reports": [
{
"id": somenumber,
"date": "2023-03-15T00:00:00+03:00",
"hour": "sometext",
"text": "sometext",
"pro": somenumber,
"task": somenumber,
},
{
"id": somenumber,
"date": "2023-03-15T00:00:00+03:00",
"hour": "sometext",
"text": "sometext",
"pro": somenumber,
"task": somenumber,
},
{
"id": somenumber,
"date": "somedate",
"hour": "sometext",
"text": "sometext",
"pro": somenumber,
"task": somenumber,
},
{
"id": somenumber,
"date": "2023-03-15T00:00:00+03:00",
"hour": "sometext",
"text": "sometext",
"pro": somenumber,
"task": somenumber,
}
]
}
1条答案
按热度按时间zsohkypk1#
您的类的属性都不匹配Json中文件的名称。Json中的
date
字段也应该Map到OffsetDateTime
类型或ZonedDateTime。要正确Map日期字段,请参阅此问题的答案以了解更多详细信息:Spring Data JPA - ZonedDateTime format for json serialization。对于属性与字段名不匹配的情况,您应该使用@JsonProperty注解。例如,而不是使用
这将告诉ObjectMapper将字段“pro”Map到属性“project”。请看这篇文章:Jackson Annotation Examples