Spring restful API,是不是有像路由器一样使用的方法来获取其他方法端点或 URL?
Posted
技术标签:
【中文标题】Spring restful API,是不是有像路由器一样使用的方法来获取其他方法端点或 URL?【英文标题】:Spring restful API, is there a method being used like router to get other method's end points or URL?Spring restful API,是否有像路由器一样使用的方法来获取其他方法端点或 URL? 【发布时间】:2018-10-04 17:21:40 【问题描述】:@RequestMapping("/accounts")
public class controller
@GetMapping("/get/id")
public final ResponseEntity<?> getHandler()
@PostMapping(value = "/create")
public final ResponseEntity<?> createHandler()
/*
trying to use some spring library methods to get the url string of
'/accounts/get/id' instead of manually hard coding it
*/
这是模拟代码,现在我在createHandler中,完成创建后,我想返回一个包含URL字符串的标题,但我不想手动连接这个URL字符串('/accounts/get /id') 这是方法getHandler()
的终点,所以我想知道是否有一种方法可以用来实现这一目标?我知道request.getRequestURI()
,但这仅适用于当前上下文中的 URI。
更多解释:如果有一些库或框架实现了路由:
Routes.Accounts.get(1234)
返回帐户获取的 URL
/api/accounts/1234
【问题讨论】:
【参考方案1】:这个想法是,您不需要指定 get
或 create
(动词在 REST 中是一个很大的禁忌)。
想象一下:
@RequestMapping("/accounts")
public class controller
@GetMapping("/id")
public final ResponseEntity<?> getHandler(@PathVariable("id") String id)
//just to illustrate
return complicatedHandlerCalculation(id).asResponse();
@PostMapping
public final ResponseEntity<?> createHandler()
//return a 204 Response, containing the URI from getHandler, with id resolved to the id from your database (or wherever).
这可以像HTTP-GET: /api/accounts/1
和HTTP-POST: /api/accounts
一样访问,后者将返回/api/accounts/2
的URI(可以使用HTTP-GET
获得或使用HTTP-PUT
更新/修改)
要解析此 URI,您可以像 Jersey 一样使用反射并评估相应类/方法上的注释。
Spring 等价物可以是:
// Controller requestMapping
String controllerMapping = this.getClass().getAnnotation(RequestMapping.class).value()[0];
和
//Method requestMapping
String methodMapping = new Object().getClass().getEnclosingMethod().getAnnotation(GetMapping.class).value()[0];
取自How do i get the requestmapping value in the controller?
【讨论】:
那是一个解决方案,但情况是我只知道方法名,我想从哪里获取请求映射url,不知道GetMapping
之类的注解的索引是多少或 RequestMapping
在这个类。所以我想知道是否有像一些JS库这样的路由器可以用于注册所有方法名称和端点,之后,我可以调用它来通过方法名称获取url,比如Routes.Accounts.get(1234)
,它返回URL帐户获得/api/accounts/1234
你想要这个吗? docs.oracle.com/javase/1.5.0/docs/api/java/lang/… 这样您就可以按名称获得一个方法。 (可能已经过时,但我认为仍然有效)以上是关于Spring restful API,是不是有像路由器一样使用的方法来获取其他方法端点或 URL?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security 保护 REST API
如何在 Spring Boot REST API 中启用对 JSON / Jackson @RequestBody 的严格验证?