如何在弹簧数据中添加自定义链接到非存储库休息控制器?

时间:2017-03-23 10:01:45

标签: spring-data-mongodb spring-data-rest spring-hateoas

我想添加自定义rest控件以添加到入口点的json / hal响应,以及spring添加的所有存储库。我有两个问题在努力解决这个问题:

  1. 如何添加自定义控制器,使其显示在入口点以及指向我的存储库的链接?

  2. 如何在存储库生成的实体的表示中使用指向我的自定义控制器的链接进行装饰,以便链接到我的自定义控制器?

  3. 我已经挣扎了一段时间并使用spring-data-mongodb创建了一个github project来证明我的意思。有一个简单的实体InvoiceInvoiceRepository扩展了MongoRepository,并有一个特殊的查找器方法List<Invoice> findByFirstName(@Param("firstName")String firstName);。 此外,还有两个自定义控制器,我希望将其包含在服务入口点的_links部分中 -

    使用Hal浏览器,此刻的入口点似乎是

    {
      "_links": {
        "invoices": {
          "href": "http://localhost:8080/customize/invoices{?page,size,sort}",
          "templated": true
        },
        "profile": {
          "href": "http://localhost:8080/customize/profile"
        }
      }
    }
    

    但我希望它是

      "_links": {
        "invoices": {
          "href": "http://localhost:8080/customize/invoices{?page,size,sort}",
          "templated": true
        },
        "export": {
          "href": "http://localhost:8080/customize/export/invoices"
        },
         "custom":{
          "href": "localhost:8080/customize/invoices/search/customList"
        }   
        "profile": {
          "href": "http://localhost:8080/customize/profile"
        }
      }
    

    对于我的问题的第二部分,我不知道如何实现。 发票的JSON表示看起来像

    {
      "firstName": "Chuck",
      "lastName": "Noris",
      "amount": 2.5,
      "exported": false,
      "_links": {
        "self": {
          "href": "http://localhost:8080/customize/invoices/27490450945023268364302849904"
        },
        "invoice": {
          "href": "http://localhost:8080/customize/invoices/27490450945023268364302849904"
        }
      }
    }
    

    我想通过自定义导出链接将其扩展到每个发票,如

    {
      "firstName": "Chuck",
      "lastName": "Noris",
      "amount": 2.5,
      "exported": false,
      "_links": {
        "self": {
          "href": "http://localhost:8080/customize/invoices/27490450945023268364302849904"
        },
        "invoice": {
          "href": "http://localhost:8080/customize/invoices/27490450945023268364302849904"
        }
        "export": {
          "href": "http://localhost:8080/customize/export/invoice/27490450945023268364302849904"
        }
      }
    }
    

1 个答案:

答案 0 :(得分:0)

正如Alan评论的那样,StackOverflow已经给出了答案:

  1. Q1

  2. Q2

  3. 对于其他读者,我已经使用两个UseCases的示例实现更新了我的Github项目。享受spring-data-rest-hal-custom