为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2022-09-14 15:36:48
我正在编写一个Spring Boot应用程序,该应用程序通过REST端点接收参数并将其转发到另一个系统。收到的参数包含一些已知字段,但也可能包含多个变量字段,这些字段以开头,后跟未定义的名称:filterexample.com?id=1&name=foo&filter1=2&filterA=B&[...]&filterWhatever=something如您所见,有参数 和 ,以及以 开头的多个参数。调用目标系统时,我需要从参数中删除键,并将之后的所有内容用作键:idnamefilterfiltertargetsystem.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很抱歉,我无法更改源系统和目标系统。
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

如果您使用通用映射的唯一顾虑只是 Swagger 是否准确,为什么不直接将注释添加到终结点呢?这将允许您指定 Swagger 输出中需要哪些参数:@ApiImplicitParams


@ApiImplicitParams(value = {

   @ApiImplicitParam(name = "name", type = "String", required = true, paramType = "query"),

   @ApiImplicitParam(name = "id", type = "String", required = true, paramType = "query")

})


查看完整回答
反对 回复 2022-09-14
?
森林海

TA贡献2011条经验 获得超2个赞

尝试


@RequestMapping

public String books(@RequestParam Map<String, String> requestParams, Other params)

     //Your code here

}


查看完整回答
反对 回复 2022-09-14
?
千巷猫影

TA贡献1829条经验 获得超7个赞

你可以做一个类,例如


@Data

public class Paramss {


    @NotNull

    private String a;

    private String b;

}

然后


@GetMapping

public Object params( @Valid @ModelAttribute Paramss params ) {

    return params;

}


查看完整回答
反对 回复 2022-09-14
  • 3 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信