Spring-Boot 1.5.10.RELEASE默认是否仍不支持Java8 LocalDate的JSR310转换器?
关于Spring Boot 1.5.x中@EntityScan与JSR310转换器的疑问解答
你观察得非常准确,这里的核心原因是显式添加@EntityScan会覆盖Spring Boot的默认实体扫描逻辑,包括自动注册JSR310转换器的行为。我来把这个逻辑拆解清楚:
Spring Boot 1.4及以上版本确实默认支持JSR310/Java 8的
LocalDate等日期类型:只要你的项目依赖了spring-data-jpa,框架会自动注册Jsr310JpaConverters,无需手动配置就能让JPA正确处理这些新日期类型。这个默认行为的前提是你没有自定义实体扫描规则。当你添加
@EntityScan注解时,相当于告诉Spring Boot:"我要自己指定扫描哪些包/类作为实体",这时框架会关闭所有默认的实体扫描配置——包括自动引入Jsr310JpaConverters的逻辑。所以如果你的实体不在主应用类的包路径下,必须加@EntityScan的话,就需要手动把Jsr310JpaConverters.class也加入扫描范围,否则JPA无法识别LocalDate这类类型,会抛出转换错误。如果你不需要扫描主应用类包外的实体,那完全可以去掉
@EntityScan注解,Spring Boot会自动扫描主应用类所在包及其子包的实体,同时自动启用JSR310转换器,这样就不用额外配置了。
总结一下:你的操作是正确的,并不是框架的问题,只是自定义扫描覆盖了默认行为导致需要手动包含转换器类。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

