鉴于此存储库
@RepositoryRestResource( path = "u", itemResourceRel="ui", collectionResourceRel = "us")
public interface IUserRepository extends CrudRepository<Users, Long> {
}
当我通过控制器调用我的服务方法findAllUsers()
时。我转变了
实体列表结果(由免费提供的userRepository.findAll()
方法返回)到域模型对象列表。这个域模型对象列表将正确反序列化为JSON,因为我正在控制如何进行反序列化。我这样做有一个具体原因,请参见下文。
现在,如果我想直接使用userRepository
,我会在序列化过程中遇到循环,因为反序列化的对象来自库com.vividsolutions.jts.geom.Geometry
。该类包含如下所述的方法
Geometry getEnvelope() Returns this Geometrys bounding box.
在反序列化期间,杰克逊因为它而进入循环。我能够纠正我的控制器中的反序列化过程。我如何从CrudRepository
?
我遇到的第一个想法是创建我的界面的实现并覆盖所有方法,但它违背了制作样板代码的目的。
答案 0 :(得分:0)
您显示@RepositoryRestResource
的用法我假设您正在使用Spring Data REST导出您的存储库。对于标准的Spring MVC编组配置,请参阅reference docs。
准确地说,您并没有拦截存储库。 Spring Data REST使用Jackson来编组和解组响应和请求。因此,您只需自定义SD REST将使用的Jackson ObjectMapper
。为此,您需要延长RepositoryRestMvcConfiguration
并覆盖configureJacksonObjectMapper(…)
:
class MyConfiguration extends RepositoryRestMvcConfiguration {
protected void configureJacksonObjectMapper(ObjectMapper mapper) {
// register custom serialializers, modules etc.
}
}
对于一般的自定义选项,请查看杰克逊reference documentation。