生成公开的RESTful URI列表

时间:2015-09-24 10:44:01

标签: spring spring-mvc

过去在JVM中使用Spring REST时应用程序会启动,就在容器完全启动之前,Spring MVC模块会输出一个列表,列出它配置为暴露的所有RESTful API?我以后一直无法在春天的后期版本中重现这一点?我意识到,如果任何人都可以获取您的日志,那么这样做会带来安全风险,但我需要尽快通过系统公开的REST调用列表。如果有人有任何建议我会非常感激。

谢谢,
标记

2 个答案:

答案 0 :(得分:3)

我不确定它是否正是您正在寻找的 - 我们想出了一个IndexController,它呈现包含所有使用HATEOAS样式的ExposesResourceFor注释的控制器的响应。因此,我们为每个控制器获取集合资源的入口点。

您可以使用RestController或RequestMapping注释的控制器执行类似操作。

@RestController
@RequestMapping(path = "/", produces = { "application/hal+json", "application/json" })
public class IndexController {
    private final Set<Class<?>> entitiesWithController;
    private EntityLinks entityLinks;
    private RelProvider relProvider;

    @Autowired
    public IndexController(ListableBeanFactory beanFactory, EntityLinks entityLinks, RelProvider relProvider) {
        this.entityLinks = entityLinks;
        this.relProvider = relProvider;
        Map<String, Object> beansWithExposesResourceForAnnotation = beanFactory.getBeansWithAnnotation(ExposesResourceFor.class);
        entitiesWithController = beansWithExposesResourceForAnnotation.values().stream()
                .map(o -> o.getClass().getAnnotation(ExposesResourceFor.class).value()).collect(Collectors.toSet());
    }

    @RequestMapping(method = GET)
    public ResponseEntity<ControllerLinksResource> getControllerLinks() {
        ControllerLinksResource controllerLinksResource = new ControllerLinksResource();

        entitiesWithController.forEach(entityClass -> controllerLinksResource //
                .add(entityLinks.linkToCollectionResource(entityClass) //
                        .withRel(relProvider.getCollectionResourceRelFor(entityClass))));

        return ResponseEntity.ok(controllerLinksResource);
    }
}

答案 1 :(得分:0)

基本上您需要REST API文档,您可以使用以下任何Rest API文档框架。

Swagger

apiDoc

JsonDoc