在我的组织中,当我想公开一个API时,我必须使用一个大合同来声明它,所有更新都必须如此。并且可能要花几周的时间才能考虑到创建或更改。
这就是为什么我们提出只为所有需要公开的API声明一个合同,并在应用反向代理中管理路由的想法(请求将包含必要的元数据,以允许路由到适当的端点):
{
"genericHttpRequest" : base64encodedByteArrayOfAnyHttpRequest
}
现在的问题是: 如何在不重新实现HTTP的情况下管理此请求?是否可以将字节数组放回结构化的HttpServletRequest中?
/**
* Manage a generic request
*/
@RequestMapping(value = "/genericRequest", method = RequestMethod.POST)
public @ResponseBody void manageGenericRequest(@RequestBody GenericHttpRequestDto body) {
byte[] genericHttpRequest = body.getGenericHttpRequest();
//(...)
}
答案 0 :(得分:0)
如果设置为方法参数,Spring将注入HttpServletRequest
。此外,通配符路径映射将使方法能够与每个请求匹配:
@RestController
@RequestMapping("/generic-endpoint/**")
public class DemoController {
@RequestMapping
public ResponseEntity<Object> genericGetRequest(HttpServletRequest httpServletRequest) {
return ResponseEntity.ok().body(httpServletRequest.getMethod());
}
}
(可选)您可以返回ResponseEntity
,以更好地控制HTTP响应。