我有这个控制器方法:
@PostMapping(
value = "/createleave",
params = {"start","end","hours","username"})
public void createLeave(@RequestParam(value = "start") String start,
@RequestParam(value = "end") String end,
@RequestParam(value = "hours") String hours,
@RequestParam(value = "username") String username){
System.out.println("Entering createLeave " + start + " " + end + " " + hours + " " + username);
LeaveQuery newLeaveQuery = new LeaveQuery();
Account account = accountRepository.findByUsername(username);
newLeaveQuery.setAccount(account);
newLeaveQuery.setStartDate(new Date(Long.parseLong(start)));
newLeaveQuery.setEndDate(new Date(Long.parseLong(end)));
newLeaveQuery.setTotalHours(Integer.parseInt(hours));
leaveQueryRepository.save(newLeaveQuery);
}
但是,当我向该端点发送发布请求时,得到以下信息
"{"timestamp":1511444885321,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.UnsatisfiedServletRequestParameterException","message":"Parameter conditions \"start, end, hours, username\" not met for actual request parameters: ","path":"/api/createleave"}"
当我从@PostMapping
注释中删除params参数时,我得到了一个更一般的错误,它将说它找不到第一个必需的参数(开始),而实际上它与参数end,hours和username一起发送。
如何在Spring MVC中获取方法中的参数?
我在这篇文章中读到了@RequestParam
只能用于get方法的内容,但是如果我删除@RequestParam
并坚持使用@PostMapping
批注的params参数,它仍然无法正常工作。我知道我可以使用,@RequestBody
但我不想只为这四个参数创建一个类。谁能告诉我如何进行这项工作?
谢谢
编辑:我在这里阅读https://docs.spring.io/spring/docs/current/javadoc-
api/org/springframework/web/bind/annotation/RequestMapping.html#params-
参数params是’完全符合我的想法。它似乎用作条件。如果一组参数与值匹配,则将激活端点控制器方法。
您要求的是根本错误的。POST请求在主体有效负载中发送数据,该有效负载通过映射@RequestBody
。@RequestParam
用于通过URL参数(例如)映射数据/url?start=foo
。您要尝试做的是@RequestParam
用来完成工作@RequestBody
。
@RequestBody Map<String, String> payload
。确保'Content-Type': 'application/json'
在您的请求标头中包含该标头。@RequestParam
,请改用GET请求,然后通过URL参数发送数据。@ModelAttribute
。@RequestBody Map<String, String> payload
。无法将表单数据编码数据直接映射到Map<String, String>
。
} 我想要创建REST服务,所以对于securitu,我需要对每个请求进行身份验证,所以我还需要传递一个用户名,而不仅仅是一个JSON。但是我不知道如何做到这一点,因为当我使用而不是时,它就不起作用了。所以我的问题是: 我如何在一个POST请求中同时传递JSON和其他参数(字符串、int...等)?
我正在编写一些脚本,以在各个级别测试我们的基础设施。我正在尝试进行测试,以验证使用和不使用http2的客户端的功能。这些文档指定了如何通过覆盖传输来禁用http2。TLSNextProto,但我找不到任何方法要求使用http2。 有没有办法要求http请求只使用http/2?或者如果没有,是否有任何类型的字段或钩子来查看它是否使用了http2?
所以我有一个php页面,我试图让我的GoLang客户端通过POST请求进行通信。php脚本通过key:value进行输入,key:value是message:hello world,希望添加多个键。它适用于我的python脚本,但不适用于golang,所以这里是我到目前为止在golang中的内容。 尝试运行上述代码时收到的错误消息: php脚本是: 我能得到的最佳回复如下:
我可以用这样的代码在市场上发布我的应用程序吗 我阅读那个严格模式只是为了调试,当我发布应用程序时,我必须删除它。
问题内容: 有什么方法可以在使用Java Swing的应用程序中重用CSS? 问题答案: 飞碟采用XML或XHTML并对其应用符合CSS2.1的样式表,以便使用(通过iText)呈现为PDF(通过iText),图像和在屏幕上显示摇摆或SWT
问题内容: 我想使用wget将图片(使用身份验证令牌“ AUTH_1624582364932749DFHDD”)上传到远程服务器到“ test”文件夹。 该命令不起作用(授权失败),我想确保它与语法无关: 有什么建议么? 问题答案: Wget当前仅支持x-www-form-urlencoded数据。不是用于将文件作为表单附件传输,而是需要格式为的数据。 并以相同的方式工作:唯一的不同是,您可以在命