【问题标题】:Spring Expose Controller Methods as LinksSpring 将控制器方法公开为链接
【发布时间】:2015-04-29 22:11:22
【问题描述】:

我有一个代表数据库中(用户)组的组实体。 GroupRepository 类有一些方法可以让我查询 Group 表,例如: List<Group> findByGroupName(String name);

当我 curl 该 URL 是该方法的直接父级时,此方法有一个暴露的 URL,即:

curl http://localhost:8080/groups/search/

{
    "_links" : {
        "searchNames" : {
          "href" : "http://localhost:8080/groups/search/seachNames{?terms}",
          "templated" : true
        },
        "findByName" : {
          "href" : "http://localhost:8080/groups/search/findByName{?name}",
          "templated" : true
    }
}

我还在构建一个控制器来添加额外的 REST 端点,我希望它们像上面一样公开为“_links”。如何让我的方法看起来像这样?

更新
这是我的一些存储库代码。

@Transactional(readOnly=true)
public interface GroupRepository extends PagingAndSortingRepository<Group, Long> {

    Group findByName(@Param("name") String name);

    @Query(value="SELECT * FROM `Group` WHERE name LIKE CONCAT('%',:terms,'%') ORDER BY CASE WHEN name = :terms THEN 0 WHEN name LIKE CONCAT(:terms,'%') THEN 1 WHEN name LIKE CONCAT('%',:terms,'%') THEN 2 WHEN name LIKE CONCAT('%',:terms) THEN 3 END",
       nativeQuery=true)
    List<Group> searchNames(@Param("terms") String terms);
}

【问题讨论】:

    标签: spring-boot spring-data spring-hateoas


    【解决方案1】:

    这是资源的 HAL 表示。这是一个标准。

    这里有一些理论资源:http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

    这是记录的标准:https://datatracker.ietf.org/doc/html/draft-kelly-json-hal-06

    如果您想将数据公开为 HAL,请查看 Spring HateOas 和 Spring Data。

    https://spring.io/guides/gs/rest-hateoas/

    【讨论】:

    • Spring 指南的链接几乎是我想要的。每当您访问一个 URL 时,Spring 都会使用 JSON 对象中“_links”部分下的所有子 URL 进行响应。我希望我的控制器中的方法被映射到带有 @RequestMapping 标记的 URL 以包含在该部分中。这有意义吗?
    • 我不确定我是否理解正确。如果方法表示资源,我认为在 _links 部分中表示控制器方法是有意义的。在您的示例中,您有资源“组”,我会说可以用 hatoas 格式表示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2018-09-07
    • 2016-12-07
    • 2016-10-18
    • 2013-11-16
    • 2023-03-21
    相关资源
    最近更新 更多