返回RequestMethod上的所有可用映射GET

时间:2016-03-30 23:24:21

标签: spring rest spring-mvc spring-boot

我正在学习春季启动和使用带有JPA的REST服务器。 对于我的RestControllers,我希望在基页上有这样的行为,当有人进入基页时,他们将能够在基页下看到所有可用的RequestMappings。

@RestController
@RequestMapping("/food")
public class FoodRestController {

@RequestMapping(value = "/all", method = RequestMethod.GET)
@ResponseBody
public Iterable<Food> printAllFoods() {
    return foodRepository.findAll();
}

@RequestMapping(value = "/add", method = RequestMethod.POST)
public ResponseEntity<?> addFood(@RequestBody Food f) {
    foodRepository.save(f);

    HttpHeaders httpHeaders = new HttpHeaders();
    return new ResponseEntity<Food>(f, httpHeaders, HttpStatus.CREATED);
}

所以对于上面的&#34; localhost:8080 / food&#34;会给出一个显示不是有效端点的页面,可能的端点是localhost:8080 / food / all或localhost:8080 / food / add。 我可以使用GET的RequestMapping并将其作为正文返回,但它将是一个手动键入的响应。想看看Spring是否提供这样的东西

2 个答案:

答案 0 :(得分:2)

您也可以使用Swagger。它实际上是一个文档框架。它还围绕一个漂亮的UI构建,以试用随文档提供的API。

答案 1 :(得分:0)

SpringBoot Actuator已经具有这样的功能。添加SpringBoot Actuator依赖项,启动应用程序并将浏览器指向:

  

http://[yourHostAndPort]/mappings

这将产生类似以下内容(假设为JSON),其中包含作为项目一部分的 ALL 映射(Spring端点也是如此!)。

{
  ...
    "{[/refresh],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}": {
        "bean": "endpointHandlerMapping",
        "method": "public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke()"
    },
    "{[/restart],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}": {
        "bean": "endpointHandlerMapping",
        "method": "public java.lang.Object org.springframework.cloud.context.restart.RestartMvcEndpoint.invoke()"
    },
    "{[/configprops],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}": {
        "bean": "endpointHandlerMapping",
        "method": "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()"
    },
    "{[/env],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}": {
        "bean": "endpointHandlerMapping",
        "method": "public java.lang.Object org.springframework.cloud.context.environment.EnvironmentManagerMvcEndpoint.value(java.util.Map<java.lang.String, java.lang.String>)"
    },
  ...
}

此代码段显示了一些其他Actuator端点可用的映射。

我理解你的要求有点不同,所以如果这个设置不是你所需要的,你应该能够创建自己的类似东西的端点,只需浏览{{3} }。执行映射端点大部分工作的特定文件是SpringBoot Actuator source code