簡體   English   中英

Spring Data REST Controller在配置的基本路徑下

[英]Spring Data REST Controller under configured base path

我正在使用Spring Boot 1.3.1.RELEASE並嘗試創建自定義存儲庫+控制器。 我將basePath配置為/ api,並且無法弄清楚如何將自定義Controller的URI自動相對於basePath。 我缺少一些魔法嗎?

這是控制器。 我也嘗試過以下各種屬性的組合。 我留下了注釋掉的,所以你可以看到我嘗試過的東西。

@RepositoryRestController
// @Controller
@ExposesResourceFor(AnalystSummaryModel.class)
// @RequestMapping("/analystsummaries")
public class AnalystSummaryController {

    @Autowired
    AnalystSummaryRepository repository;

    @Autowired
    private AnalystSummaryResourceAssembler resourceAssembler;

    @ResponseBody
    @RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
    public PagedResources<AnalystSummaryModel> getAnalystSummaries(
            final Pageable pageable,
            final PagedResourcesAssembler assembler) {
        final Page<AnalystSummaryModel> analystSummaries = repository.findAll(pageable);
        return assembler.toResource(analystSummaries, resourceAssembler);
    }
}

我還基於另一個問題創建了ResourceProcessor。

當我查看/ api端點時,我看到以下內容:

{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080"
    },
    "profile" : {
      "href" : "http://localhost:8080/api/profile"
    }
  }
}

當我取消注釋@RequestMapping時,我得到:

{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/analystsummaries"
    },
    "profile" : {
      "href" : "http://localhost:8080/api/profile"
    }
  }
}

我錯過了映射是否相對於basePath,我在application.yml中設置了以下內容?

spring.data.rest.base-path:/ api

更多信息:

使用@BasePathAware實際上會導致這個控制器服務有兩個不同的URI! 它顯示在/ /和/ api / analystSummaries(因為自動復數等)。 然后在使用ControllerLinkBuilder時,它使用第一個路徑。 所以我更新的問題是:為什么這會暴露兩次? 如何消除隱式根(因為沒有@RequestMapping)並保留/ api下的那個?

擺脫spring.data.rest.base-path: /api並添加:

server.servlet-path: /api

自Spring boot 1.4.0.RC1起,這可以通過特定配置完成。

請參閱我的答案如何為所有控制器配置默認的@RestController URI前綴?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM