簡體   English   中英

Spring @RequestParam-混合命名的參數和Map <String,String> 參數

[英]Spring @RequestParam - Mixing named params and Map<String,String> params

我正在編寫一個Spring Boot應用程序,該應用程序通過REST端點接收參數並將其轉發到另一個系統。 收到的參數包含一些已知字段,但也可能包含多個以filter開頭的變量字段,后跟一個未定義的名稱:

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

如您所見,有參數idname ,以及以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映射所有參數?

不幸的是,我無法更改源系統和目標系統。

如果您關心使用通用映射只是Swagger是准確的,為什么不只將@ApiImplicitParams 注釋添加到端點? 這可以讓您指定Swagger輸出中需要哪些參數:

@ApiImplicitParams(value = {
   @ApiImplicitParam(name = "name", type = "String", required = true, paramType = "query"),
   @ApiImplicitParam(name = "id", type = "String", required = true, paramType = "query")
})

你可以上課,例如

@Data
public class Paramss {

    @NotNull
    private String a;
    private String b;
}

接着

@GetMapping
public Object params( @Valid @ModelAttribute Paramss params ) {
    return params;
}

另請參見: Spring @RequestParam與類

嘗試

@RequestMapping
public String books(@RequestParam Map<String, String> requestParams, Other params)
{ 
     //Your code here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM