如何在Spring Data REST中公开@EmbeddedId转换器

时间:2014-10-08 05:02:27

标签: java spring spring-data spring-data-rest

有些实体具有复合主键,并且这些实体在公开时具有错误的链接,在_links中的URL中具有类的完全限定名称

同时点击链接会出现错误 -

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type java.lang.String to type com.core.connection.domains.UserFriendshipId

我使用jpa开发了XML配置的Spring Repository:启用了存储库,从JpaRepository扩展了Respository

我可以使用Repository实现 org.springframework.core.convert.converter.Converter 来处理这个问题。目前获得如下链接 -

_links: {
userByFriendshipId: {
href: "http://localhost:8080/api/userFriendships/com.core.connection.domains.UserFriendshipId@5b10/userByFriendId"
}

在xml配置中,我有jpa:启用了存储库并且在存储库中启用了@RestResource

2 个答案:

答案 0 :(得分:4)

首先,您需要获得可用的链接。目前,您的复合ID已显示为com.core.connection.domains.UserFriendshipId@5b10。它应该足以覆盖toString的{​​{1}}方法,以生成像UserFriendshipId这样有用的东西。

接下来,您需要实施converter,以便2-3可以转换回2-3

UserFriendshipId

最后,您需要注册转换器。您已建议覆盖class UserFriendShipIdConverter implements Converter<String, UserFriendshipId> { UserFriendShipId convert(String id) { ... } }

configureConversionService

如果您更喜欢XML配置,则可以按照documentation

中的说明进行操作

答案 1 :(得分:1)

要扩展已接受的答案..使用spring-boot时,为了使其正常工作,扩展RepositoryRestMvcConfiguration的类也需要@Configuration注释。我还需要在弹簧启动应用程序类中添加以下注释:

@SpringBootApplication
@Import(MyConfiguration.class)
public class ApplicationContext {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationContext.class,args);
    }
}

我还在我的方法中调用了覆盖configureConversionService

的超级方法
    @Override
    protected void configureConversionService(ConfigurableConversionService conversionService) {
        super.configureConversionService(conversionService);
        conversionService.addConverter(new TaskPlatformIdConverter());
    }

这会保留默认转换器,然后添加你的