spring-data-rest 和控制器,使用相同的 objectMaper 进行序列化/反序列化
Posted
技术标签:
【中文标题】spring-data-rest 和控制器,使用相同的 objectMaper 进行序列化/反序列化【英文标题】:spring-data-rest and controllers, use the same objectMaper for serializing/deserializing 【发布时间】:2017-05-10 07:55:31 【问题描述】:我在 spring-data-rest 的文档中发现它使用自己的 objectMapper 实现。
我想知道是否可以重用这个 objectMapper,这样我就可以拥有与 spring-data-rest
端点相同的实体表示
例如,没有任何杰克逊 objectMapper bean 我有这个
端点:GET /api/companies
"createdDate":
"content": "2016-12-25T12:39:03.437Z"
,
"lastModifiedDate": null,
"createdById": null,
"lastModifiedById": null,
"active": true,
"name": "A6",
"addressSecondary": null,
"foundingDate":
"content": "2016-01-01"
,
但是对于我的控制器,我有:
"createdDate":
"nano": 437000000,
"epochSecond": 1482669543
,
"lastModifiedDate": null,
"createdById": null,
"lastModifiedById": null,
"active": true,
"name": "A6",
"addressSecondary": null,
"foundingDate":
"year": 2016,
"month": "JANUARY",
"era": "CE",
"dayOfYear": 1,
"dayOfWeek": "FRIDAY",
"leapYear": true,
"dayOfMonth": 1,
"monthValue": 1,
"chronology":
"calendarType": "iso8601",
"id": "ISO"
这是我自己的控制器实现:
@RequestMapping(method = RequestMethod.GET, value = "companies", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<?> testRead()
List<Customer> customerRepositoryList = customerRepository.findAll();
Resources<Customer> resources = new Resources<>(customerRepositoryList);
return ResponseEntity.ok(resources);
我的代码中没有任何 objectMapper 的 bean。
我怎样才能得到相同的序列化?
【问题讨论】:
【参考方案1】:我认为您只想正确输出 LocalDate 和 LocalDateTime 字段。 如果是这样 - 将此依赖项添加到您的项目中:
<!-- JDK 8 DateTime support for Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
还有这些字段注释:
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate date;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime dateTime;
【讨论】:
以上是关于spring-data-rest 和控制器,使用相同的 objectMaper 进行序列化/反序列化的主要内容,如果未能解决你的问题,请参考以下文章
我可以让自定义控制器镜像 Spring-Data-Rest / Spring-Hateoas 生成的类的格式吗?
在 spring-data-rest HAL _links 中将 UUID 编码更改为 base-32