我正在编写一个Spring Boot应用程序,该应用程序通过REST端点接收参数并将其转发到另一个系统。收到的参数包含一些已知字段,但也可能包含多个以filter
开头的变量字段,后跟一个未定义的名称:
example.com?id=1&name=foo&filter1=2&filterA=B&[...]&filterWhatever=something
如您所见,存在参数id
和name
,以及以filter
开头的多个参数。调用目标系统时,我需要从参数键中删除filter
并将其后的所有内容用作键:
targetsystem.com?id=1&name=foo&1=2&A=B&[...]&whatever=something
(键中不再有过滤器)
这本身不是问题,我只能@RequestParam Map<String, String> params
,流式处理/循环参数并根据需要进行修改。但是,使用Swagger作为API文档工具,我想列出所有已知参数,以便客户端可以看到实际支持的内容。
我尝试混合使用命名参数和通用参数,但无法识别处理程序:
myEndpoint(final @RequestParam String id, final @RequestParam String name, final @RequestParam Map<String, String> remainingParams)
是否可以映射特定的参数并捕获Map<String,String>
中的所有其他内容?还是还有其他可能性,例如使用正则表达式模式映射以filter
开头的所有参数?
不幸的是,我无法更改源系统和目标系统。
答案 0 :(得分:1)
如果您关于仅使用通用映射的 问题只是Swagger是准确的,为什么不将@ApiImplicitParams
annotation添加到端点?这可以让您指定Swagger输出中需要哪些参数:
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "name", type = "String", required = true, paramType = "query"),
@ApiImplicitParam(name = "id", type = "String", required = true, paramType = "query")
})
答案 1 :(得分:0)
您可以上课,例如
@Data
public class Paramss {
@NotNull
private String a;
private String b;
}
然后
@GetMapping
public Object params( @Valid @ModelAttribute Paramss params ) {
return params;
}
答案 2 :(得分:0)
尝试
@RequestMapping
public String books(@RequestParam Map<String, String> requestParams, Other params)
{
//Your code here
}