2

さまざまなドキュメントと説明から、これまでに次のポイントを獲得し、学びました。

  1. Spring Data Rest (SDR) は、Spring Data リポジトリを REST サービスとして公開するために使用されるため、JAXRS を手動で作成する必要なく、自己探索に使用できます。リポジトリ層でのみ機能し、を使用した構成以外の変更または追加に関して、その動作方法を制御することはできませんRepositoryRestMvcConfiguration。内部のどこかで Spring HATEOAS を使用しています。

  2. Spring HATEOAS は、コントローラーまたは REST エンドポイントを介して返されるエンティティ内にリンクを作成するために作成されています。エンティティまたはラッパー クラスをResourceSupport拡張してエンティティResourceをラップし、リンクを作成または追加する必要があります。や など、使用する注釈とクラスがいくつかあり@EnableHyperediaSupportますEntityLinks

まだ調べていない、または知り得ていない点がいくつかあるかもしれませんが、SDR を HATEOAS リンク構築プロセスにどのように組み合わせることができるのかに興味がありました。たとえば、と言ってください。

EntityBean bean = repository.findByName(name);
Resource<EntityBean> resource = new Resource<EntityBean>(bean);
//JaxRsLinkBuilder.linkTo(TestResource.class).withRel("entity")     // this also works   
//ControllerLinkBuilder.linkTo(TestResource.class).withRel("myRel") // this also works
// I am curious how ControllerLinkBuilder and JaxRSLinkBuilder both are working for JaxRS.  
//Here TestResource is my REST service class. now in below line: 
resource.add(JaxRsLinkBuilder.linkTo(MyRepository.class).withRel("sdf")); //not working
// MyRepository is SDR exposed repository, which I thought should work but not working.
return resource;  

だから、公開されたRESTリポジトリを手動のHATEOASリンク構築プロセスに含めたかっただけです..そうすることが可能ですか?

4

1 に答える 1

3

Spring-HATEOAS ResourceProcessorを使用してリンクを構築できるはずです。

例:

@Component
public class MyBeanResourceProcessor implements ResourceProcessor<Resource<MyBean>> {

    @Autowired
    private EntityLinks entityLinks;

    public Resource<MyBean> process(Resource<MyBean> resource) {
        MyBean mybean = resource.getContent();

        // Do your linking here using entity class
        //EntityBean bean = repository.findByName(name);
        //Resource<EntityBean> resource = new Resource<EntityBean>(bean);
        // assuming you are linking to a single resource and bean.getId() method... check entitylinks for other methods
        //resource.add(entityLinks.linkForSingleResource(bean.class,bean.getId()).withRel("sdf"));

        return resource;
    }

}
于 2014-05-21T14:34:15.700 に答える