以通用方式管理任何HTTP请求

时间:2019-07-09 18:31:12

标签: java spring spring-boot

在我的组织中,当我想公开一个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();

  //(...)
}

1 个答案:

答案 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响应。