春季@RequestParam - 混合命名参数和地图<字符串,字符串>参数

我正在编写一个Spring Boot应用程序,该应用程序通过REST端点接收参数并将其转发到另一个系统。收到的参数包含一些已知字段,但也可能包含多个变量字段,这些字段以开头,后跟未定义的名称:filter

example.com?id=1&name=foo&filter1=2&filterA=B&[...]&filterWhatever=something

如您所见,有参数 和 ,以及以 开头的多个参数。调用目标系统时,我需要从参数中删除键,并将之后的所有内容用作键:idnamefilterfilter

targetsystem.com?id=1&name=foo&1=2&A=B&[...]&whatever=something(键中不再有过滤器)

这本身不是问题,我可以只是,流式传输/循环参数并根据需要进行修改。但是使用 Swagger 作为 API 文档工具,我想列出所有已知的参数,以便客户端可以看到实际支持的内容。@RequestParam Map<String, String> params

我尝试混合命名参数和捕获所有参数,但它无法识别处理程序:

myEndpoint(final @RequestParam String id, final @RequestParam String name, final @RequestParam Map<String, String> remainingParams)

是否可以映射特定的参数并捕获其他所有内容?或者还有其他可能性,比如从使用正则表达式模式开始映射所有参数?Map<String,String>filter

很抱歉,我无法更改源系统和目标系统。


红糖糍粑
浏览 147回答 3
3回答

炎炎设计

如果您使用通用映射的唯一顾虑只是 Swagger 是否准确,为什么不直接将注释添加到终结点呢?这将允许您指定 Swagger 输出中需要哪些参数:@ApiImplicitParams@ApiImplicitParams(value = {&nbsp; &nbsp;@ApiImplicitParam(name = "name", type = "String", required = true, paramType = "query"),&nbsp; &nbsp;@ApiImplicitParam(name = "id", type = "String", required = true, paramType = "query")})

森林海

尝试@RequestMappingpublic String books(@RequestParam Map<String, String> requestParams, Other params){&nbsp;&nbsp; &nbsp; &nbsp;//Your code here}

千巷猫影

你可以做一个类,例如@Datapublic class Paramss {&nbsp; &nbsp; @NotNull&nbsp; &nbsp; private String a;&nbsp; &nbsp; private String b;}然后@GetMappingpublic Object params( @Valid @ModelAttribute Paramss params ) {&nbsp; &nbsp; return params;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java