Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 将Spring数据rest链接与同一实体上的控制器链接合并_Spring Boot_Spring Data Rest_Hateoas_Spring Hateoas - Fatal编程技术网

Spring boot 将Spring数据rest链接与同一实体上的控制器链接合并

Spring boot 将Spring数据rest链接与同一实体上的控制器链接合并,spring-boot,spring-data-rest,hateoas,spring-hateoas,Spring Boot,Spring Data Rest,Hateoas,Spring Hateoas,我想结合HATEAOS链接到控制器和存储库上的方法 @RepositoryRestController @ResponseBody @ExposesResourceFor(Group.class) @RequestMapping(value = "/api/v2/groups", produces = MediaTypes.HAL_JSON_VALUE) public class GroupController { @Resource private GroupService

我想结合HATEAOS链接到控制器和存储库上的方法

@RepositoryRestController
@ResponseBody
@ExposesResourceFor(Group.class)
@RequestMapping(value = "/api/v2/groups", produces = MediaTypes.HAL_JSON_VALUE)
public class GroupController {

    @Resource
    private GroupService groupService;

    @RequestMapping(value = "/external", method = POST)
    public  @ResponseBody   PersistentEntityResource saveExternalGroup(
            @RequestBody Group newGroup,
            PersistentEntityResourceAssembler assembler) {

        return assembler.toResource(groupService.saveExternalGroup(newGroup));

    }

}
存储库:

@RepositoryRestResource(excerptProjection = GroupSummary.class)
public interface GroupDao extends DefaultDao<Group, Long> {

    @NotNull
    List<Group> findByState(@Nullable GroupState state);
...other methods...
我应该实施什么才能达到上述目标,再加上以下内容:

"external": {
          "href": "http://localhost:8300/api/v2/groups/external"
        }
或者“/外部”是不是有问题?如果是的话,请用“方法=GET”来评论和考虑这个问题。< /P> < P>选项1:

如果是一次性的,您可以使用
资源
类在controller方法中添加链接

@RequestMapping(value = "/external", method = POST)
public  @ResponseBody   PersistentEntityResource saveExternalGroup(
        @RequestBody Group newGroup,
        PersistentEntityResourceAssembler assembler) {

    PersistentEntityResource resource = assembler.toResource(groupService.saveExternalGroup(newGroup));

    // Replace with ControllerLinkBuilder call, or EntityLinks as you see fit.
    resource.add(new Link("http://localhost:8300/api/v2/groups/external","search"));

    return resource;
}
备选案文2:

如果希望将此链接添加到每个渲染的
资源
,请创建
资源处理器
组件以添加它

@Component
public class GroupResourceProcessor implements ResourceProcessor<Resource<Group>> {

    @Override
    public Resource<Group> process(Resource<Group> groupResource) {

        // Replace with ControllerLinkBuilder call, or EntityLinks as you see fit.
        groupResource.add(new Link("http://localhost:8300/api/v2/groups/external","search"));

        return groupResource;
    }

}
@组件
公共类GroupResourceProcessor实现ResourceProcessor{
@凌驾
公共资源进程(资源组资源){
//替换为ControllerLinkBuilder调用,或您认为合适的EntityLinks。
groupResource.add(新链接(“http://localhost:8300/api/v2/groups/external“,”搜索“);
返回组资源;
}
}

选项1)此链接在执行方法时生成。我想实现的是,当我转到/groups时,将有指向所有DAO方法的链接和指向控制器的所有链接。选项2)我添加了处理器,但在我看来它从未被调用。然后我发现这是使用投影时的问题(我是这样做的):@cipus Ok,然后选择2。如果您查看所链接的问题附带的JIRA问题,您会发现您可以这样做,但您必须创建一个
ResourceProcessor
或任何您的投影来实现该逻辑。您应该仍然能够让它工作。具有正确投影的选项适用于每个记录,但不在“根”级别提供。通过根级别,我的意思是,若我在数据库中并没有记录,那个么它将为您提供“…profile/groups”、“../groups/search”和“self”。有没有办法再添加一个链接?
@Component
public class GroupResourceProcessor implements ResourceProcessor<Resource<Group>> {

    @Override
    public Resource<Group> process(Resource<Group> groupResource) {

        // Replace with ControllerLinkBuilder call, or EntityLinks as you see fit.
        groupResource.add(new Link("http://localhost:8300/api/v2/groups/external","search"));

        return groupResource;
    }

}