Spring Data Rest保存可执行实体

时间:2017-02-09 15:52:08

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

我尝试了许多不同的方法将JSON数组传递给Spring Data Rest Repository,但不确定如何操作。我有一个扩展存储库的自定义存储库接口:

@NoRepositoryBean
interface BaseRepository<T, ID extends Serializable> extends Repository<T, Long> {

    T save(T entity)

    List<T> save(Iterable<T> entities)

}

我可以保存单个实体,但是当我尝试传递一个JSON对象数组时,我得到一个错误,无法反序列化实例......

不确定如何传递对象以便我可以进行批量插入。

2 个答案:

答案 0 :(得分:1)

不幸的是,你没有发布使用你的界面的代码,如果你实际上正如你在问题中描述的那样传递数组,那么你就不会调用List<T> save(Iterable<T> entities)而是T save(T entity)。数组不是Iterable,因此编译器会将您的数组解释为T,因为数组不是实体,所以您会收到错误。

将数组转换为Iterable以解决此问题。 Arrays.asList(someArray)可以解决问题。

答案 1 :(得分:0)

我似乎通过覆盖保存方法来解决它,我确信有更好的方法,我愿意接受建议。

BaseRepository

size_t

ContactRepository

@NoRepositoryBean
interface BaseRepository<T, ID extends Serializable> extends Repository<T, Long> {

    @RestResource(path="byIdIn",rel="byIdIn")
    @Query("select r from #{#entityName} r where r.id in :q")
    Page<T> findByIdIn(@Param("q") List<Long> q, Pageable pageable)

    Page<T> findAll(Pageable pageable)

    T findOne(ID id)    

    T save(T entity)

    T delete(ID id)

}

ContactRepositoryCustom

@RepositoryRestResource(collectionResourceRel="contacts", path="contacts")
interface ContactRepository extends BaseRepository<Contact, Long>, ContactRepositoryCustom {

}

ContactRepositoryImpl

interface ContactRepositoryCustom  {
    public <S extends Contact> S save(S entity)

}

这只是一个示例,它需要一些清理,但我有save()方法按预期工作。我只是不想在Spring Data / Spring Data Rest中使用注释来完成这样的事情,而不必像这样解决这样的解决方案。我搜索了文档和在线,但没有找到解决方案。我可能忽视了一些事情,不确定。