How to add elements in a many-to-many relationship via Spring's @RepositoryRestResource REST API?

雨燕双飞 提交于 2019-11-30 05:36:51

问题


I'm having trouble figuring out exactly how to use the @RepositoryRestResource interface to create many-to-many relationships between two fairly simple entities.

For example, I have a simple parent-child entity relationship like this:

@Entity
public class ParentEntity {
    @Id
    @GeneratedValue
    private Long id;

   @ManyToMany
   private List<ChildEntity> children;
}

@Entity
public class ChildEntity {
    @Id
    @GeneratedValue
    private Long id;

    @ManyToMany(mappedBy="children")
    private List<ParentEntity> parents;
}

My repositories are using the vanilla Spring @RepositoryRestResource HATEOS API:

@RepositoryRestResource(collectionResourceRel = "parents", path = "parents")
public interface ParentRepository extends PagingAndSortingRepository<ParentEntity, Long> {
}

@RepositoryRestResource(collectionResourceRel = "children", path = "children")
public interface ChildRepository extends PagingAndSortingRepository<ChildEntity, Long> {
}

I’ve been successful in using POST to create the individual ParentEntity and ChildEntity but I can’t seem to figure out how to PUT/PATCH the relationships between the two using the built-in interface.

It seems like I should be able to use a PUT to send JSON to something like http://localhost:8080/api/parents/1/children, but so far I'm not finding a structure that works.


回答1:


I found an answer here: How to update reference object in Spring-data rest?

By using "Content-Type: text/uri-list" instead of JSON, it is possible to "add" a resource to the collection with a PUT and pass in the URI. You can remove the resource with a DELETE.

After some digging, I discovered that the Spring documentation does describe this: http://docs.spring.io/spring-data/rest/docs/2.2.0.RELEASE/reference/html/#repository-resources.association-resource.




回答2:


I always hated that text/uri-list content-type, so I did some research and it turned out there is also an undocumented JSON format which can be used:

{
  "_links":{
    "rel":"/555",
    "rel":"/556"
  }
}

The rel of the links could be anything except empty string, they could be all the same. The link part could be the whole URL form the self link of the referenced object, but the last part of the URL is enough. ( forseslash +id)



来源:https://stackoverflow.com/questions/26259474/how-to-add-elements-in-a-many-to-many-relationship-via-springs-repositoryrestr

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!