Java Spring Boot HATEOAS rest服务中的LocalDateTime序列化
我面临以下问题:在一个使用Spring Boot、Spring data jpa和Spring data rest的项目中,为了发布HATEOAS rest服务,我想将LocalDateTime变量转换为类似“2014-12-20T02:30:00.472”的内容,以便进行序列化,也就是说,我希望发送给客户端的响应始终包含该格式 根据以下内容和建议,我在模型类中使用了这些注释:Java Spring Boot HATEOAS rest服务中的LocalDateTime序列化,java,json,jackson,spring-data-rest,spring-hateoas,Java,Json,Jackson,Spring Data Rest,Spring Hateoas,我面临以下问题:在一个使用Spring Boot、Spring data jpa和Spring data rest的项目中,为了发布HATEOAS rest服务,我想将LocalDateTime变量转换为类似“2014-12-20T02:30:00.472”的内容,以便进行序列化,也就是说,我希望发送给客户端的响应始终包含该格式 根据以下内容和建议,我在模型类中使用了这些注释: public class Order { ... @JsonSerialize(using = Loc
public class Order {
...
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime createdAt;
...
getter and setter
}
这是我的存储库界面:
@RepositoryRestResource(path = "orders", collectionResourceRel = "orders")
public interface IOrderRepository extends JpaRepository<Order, Long> {
}
现在奇怪的是:
- 如果我向URL“”发送请求,那么我的测试控制器将检索id=1的订单,并显示正确的日期时间格式(即“2014-12-20T02:30:00.472”);值得注意的是,在本例中,资源以“non-HATEOAS”形式返回,即它没有任何“\u链接”或“\u嵌入”装饰
- 查询rest URI“”时,我会收到一个HATEOAS响应,但这次datetime格式如下所示:
“创建数据”:{ “年份”:2010年, “月”:“一月”, “月日”:1, “星期五”:“星期五”, “dayOfYear”:1, “月价值”:1, “小时”:2, “分钟”:2, “第二”:0, “纳米”:0, “年表”:{ “id”:“ISO”, “日历类型”:“iso8601” } }
任何帮助都将不胜感激。最后,我发现了问题所在:它只是一个肮脏的浏览器缓存问题;由于某种原因,在改变不同的设置时,我总是得到相同的结果,似乎HATEOAS有问题;清理浏览器缓存解决了这个问题
按照@Cepr0的建议,也发现只使用@JsonFormat注释就足够了;因此不需要@JsonSerialize(使用=LocalDateTimeSerializer.class)和@jsondesellize(使用=LocalDateTimeDeserializer.class)注释。我建议使用。另外,不要忘记在gradle/maven配置文件中添加jackson-datatype-jsr310依赖项。我已经添加了jackson-datatype-jsr310依赖项,因此我能够获得我想要的格式,至少在某些情况下,即当没有生成HATEOAS响应时。在另一种情况下,当响应由IOrderRepository生成时,spring似乎没有考虑转换的需要。在我的示例中,对字段使用注释@JsonFormat并添加jackson-datatype-jsr310作为依赖项就足够了。看我的。。。
@RestController
public class JavaTimeController {
IOrderRepository repo;
public JavaTimeController(IOrderRepository repo) {
super();
this.repo = repo;
}
@RequestMapping("/dblocaldatetime")
public Order dbLocalDateTime() {
Order order = repo.findOne(1L);
return order;
}
}