Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot HATEOAS rest服务中的LocalDateTime序列化_Java_Json_Jackson_Spring Data Rest_Spring Hateoas - Fatal编程技术网

Java Spring Boot HATEOAS rest服务中的LocalDateTime序列化

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

我面临以下问题:在一个使用Spring Boot、Spring data jpa和Spring data rest的项目中,为了发布HATEOAS rest服务,我想将LocalDateTime变量转换为类似“2014-12-20T02:30:00.472”的内容,以便进行序列化,也就是说,我希望发送给客户端的响应始终包含该格式

根据以下内容和建议,我在模型类中使用了这些注释:

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响应的过程中会发生一些事情,但我无法进一步调查:我怎么可能?
任何帮助都将不胜感激。

最后,我发现了问题所在:它只是一个肮脏的浏览器缓存问题;由于某种原因,在改变不同的设置时,我总是得到相同的结果,似乎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; 
    }
}