我有这个控制器方法:
@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);
}
然而,当我向这个端点发送POST请求时,我会收到以下响应:
"{"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一起被发送。如何在方法post spring mvc中获取参数?我在这篇文章中读到@RequestParam
只能用于get方法,但如果我删除@RequestParam
并坚持使用@PostMapping
注释的params参数,它仍然无法正常工作。我知道我可以使用@RequestBody
,但我不想为那4个参数创建一个类。有人可以告诉我如何使这个工作吗?谢谢编辑:我在这里阅读 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params-- ,发现参数params并不是我想象的那样,它似乎被用作条件。如果一组参数匹配一个值,则激活端点控制器方法。
@RequestParam
。如果你要发布一个主体(以JSON、XML等形式),并且你想将其编组为一个对象,那么你应该使用@RequestBody
。如果你只想使用参数,那么@RequestBody
基本上是无用的。然而,绑定到一个对象应该优先于单独的参数,为此你应该使用@ModelAttribute
。 - M. Deinum@RequestParam
不能与POST请求一起使用。 - Maurice@PathVariable
注释。 - Maurice