【问题标题】:MockMvc show corresponding curl command or http requestMockMvc 显示对应的 curl 命令或 http 请求
【发布时间】:2013-06-25 15:59:45
【问题描述】:
我有一行代码执行对 API 的请求,但我无法确定请求的确切格式。
mapper.writeValueAsString 来自here。
mockMvc 来自here。
mockMvc.perform(post("/press/group").param("filterId", filterId).content(mapper.writeValueAsString(someObject)).contentType(MediaType.APPLICATION_JSON))
我正在尝试将代码转换为 Python,如果有办法让我的 mockMvc 输出相应的 HTML 请求,那将非常有帮助。我查询的 API 缺少文档
谢谢,非常感谢任何指导
【问题讨论】:
标签:
java
api
spring-mvc
curl
【解决方案1】:
MockMvc 允许您打印请求和响应。
在你的情况下,你应该这样做:
mockMvc.perform(post("/press/group").param("filterId", filterId).content(mapper.writeValueAsString(someObject)).contentType(MediaType.APPLICATION_JSON)).andDo(print());
这会将输出打印到控制台,看起来像这样:
MockHttpServletRequest:
HTTP Method = POST
Request URI = /press/group
Parameters = {filterId=[filterId_val]}
Headers = {}
Handler:
Type = com.yourCompany.yourController
Method = public ReturnType com.yourCompany.yourController.yourHandlerMethod(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse,java.lang.String)
Async:
Async started = false
Async result = null
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {}
Content type = null
Body = {"val1" : "val_one"}
Forwarded URL = null
Redirected URL = null
Cookies = []
这应该足以让您在 python 中构造 http 请求。
【解决方案2】:
不了解 mockMVC,但如果它在 HTML 页面中呈现,您可以使用 Chrome 开发人员工具为您生成 curl 语句。
启动工具/开发者工具,点击网络标签,点击链接/按钮/导致请求的东西,在网络标签中找到请求,右键,复制为cUrl。
显然,如果它没有在 HTML 页面中呈现,这将不会有很大的帮助。
【解决方案3】:
提取mapper.writeValueAsString(someObject)字符串的值
这个字符串是 JSON (MediaType.APPLICATION_JSON) 所以它应该看起来像:
{"attribute":"value","attribute":"value"}
还有param("filterId", filterId)
已添加到您的网址(变量filterId 是一些字符串,因此请提取它)
/press/group?filterId:filterIdString
将其粘贴到 curl 消息中:
curl -X POST -d '{"attribute":"value","attribute":"value"}' -H "Content-Type: application/json" "admin:password@localhost:8080/press/group?filterId:filterId" -i
看回复
解释
X 请求类型
-d数据
-H 内容类型
admin:passwor@ 凭据
-i信息