spring 如何从json反序列化到java对象?

e0bqpujr  于 2023-05-27  发布在  Spring
关注(0)|答案(1)|浏览(199)

我的问题是我需要将我的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,
     }
   ]
 }
zsohkypk

zsohkypk1#

您的类的属性都不匹配Json中文件的名称。Json中的date字段也应该Map到OffsetDateTime类型或ZonedDateTime。要正确Map日期字段,请参阅此问题的答案以了解更多详细信息:Spring Data JPA - ZonedDateTime format for json serialization。对于属性与字段名不匹配的情况,您应该使用@JsonProperty注解。例如,而不是

private Long project;

使用

@JsonProperty("pro")
private Long project;

这将告诉ObjectMapper将字段“pro”Map到属性“project”。请看这篇文章:Jackson Annotation Examples

相关问题