2015-09-26 87 views
3

有沒有辦法通過註釋設置資源關係?我前段時間提出了類似的問題,但我還不夠清楚。我想有這樣的事情:如何通過Spring Hateoas中的註釋設置資源關係?

public class UserResource { 

    private String username; 

    @Relation(value = "{servicebaseUrl}/classes/${value}", rel = "class") 
    private String classId; 

    // Getters and setters 
} 

,然後添加一個消息轉換器僅在客戶端發送Accept = application/hal+json,避免做兩個不同的控制器端點application/hal+jsonapplication/json的事實,這將增加鏈接。 Spring是否提供類似的東西?我發現它實際上提供了這個註解(或類似的註解),但它似乎並不是出於同樣的目的。

回答

1

不,這是不可能的 - 你必須實現一個ResourceAssembler來添加鏈接到你的資源。

通常您的資源擴展爲ResourceSupport

class PersonResource extends ResourceSupport { 

    String firstname; 
    String lastname; 
} 

然後你創建ResourceAssembler來控制資源的創建:

class PersonResourceAssembler extends ResourceAssemblerSupport<Person, PersonResource> { 

    public PersonResourceAssembler() { 
    super(PersonController.class, PersonResource.class); 
    } 

    @Override 
    public PersonResource toResource(Person person) { 

    PersonResource resource = createResource(person); 
    // … do further mapping and add links 
    resource.add(new Link("http://myhost/people")); 
    return resource; 
    } 
} 

spring hateoas documentation的細節

+0

也許使用ResourceAssembler將減少環節樣板,但我仍然可以使用控制器應用程序/ hal + json的端點。所以這不會改變爲同一資源擁有兩個不同控制器端點的事實。感謝您的答覆! – jscherman