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