提问人:MrCoder 提问时间:11/16/2023 更新时间:11/16/2023 访问量:33
@RequestHeader Map<String, String> 在 swagger UI 中不起作用
@RequestHeader Map<String, String> is not working in swagger UI
问:
我有一个方法为 @GET 的控制器。我想将标题作为 Map<String、String> 传递,但是在 swagger UI 端看不到要传递标题的字段。
例如:当我尝试将标题作为 @RequestHeader 字符串传递时,字段在 swagger UI 部分上可见,就在传递正文的位置上方,但是在注释之后有一个 Map,根本没有地方放置这个标题。
public ResponseEntity<MyObject> getObject(
@RequestHeader String test,
@RequestHeader Map<String, String> headers) {
//logic here
}
例如,我希望能够通过一些文本框传递三个标题(例如@RequestBody正在工作)。为了不创建无数带有具体标题的标签,我想通过 swagger UI 通过地图传递标题。可能吗?
谢谢
答:
0赞
lance-java
11/16/2023
#1
您不应该像这样通过请求标头传递数据。请求标头用于将有关客户端的信息传递给服务器(例如,客户端是否接受 gzip 压缩响应)
若要将数据传递到服务器,应使用:
- 请求参数 (@RequestParam)
- 路径变量 (@PathVariable)
- POST 的主体 (@RequestBody)
请注意,GET 请求不支持 @RequestBody(标准 HTTP 协议,与 spring / swagger 无关)
下面是包含 @PathVariable、@RequestParam 和 @RequestBody 的 POST 示例
public class MyBodyBean {
private String value1;
private String value2;
private String value3;
// getters / setters
}
public class FooController {
@PostMapping("/foo/{test1}/do-something/")
public ResponseEntity doSomething(
@PathVariable("test1") test1,
@RequestParam("test2") test2,
@RequestBody MyBodyBean body
) {
doStuff(test1, test2, body);
return ResponseEntity.ok(HttpStatus.OK);
}
}
要调用它,您需要将 JSON 正文发布到/foo/xxx/do-something?test2=yyy
JSON 正文如下所示
{
"value1":"A",
"value2":"B",
"value3":"C"
}
评论
0赞
MrCoder
11/17/2023
感谢您的回复。其实很好,但这样通过它不是我的选择。我发现 - 当您将 RequestHeader 作为自定义对象传递时,该对象内部的映射是可见的,我可以将对象传递给 swagger,但只是映射我不能。可以传递字符串映射吗?
0赞
lance-java
11/17/2023
您可以作为请求参数传递,但请注意,这需要进行 URL 编码。所以会变成.例如 /myapp/someurl?map=%7B%22foo%22%3A%22bar%22%7D。swagger UI 可能会为您进行 URL 编码{"foo":"bar"}
%7B%22foo%22%3A%22bar%22%7D
评论