¿Puedo usar la anotación @Requestparam para una solicitud de publicación?
Tengo este método de controlador:
@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);
}
Sin embargo, cuando envío una solicitud de publicación a este punto final obtengo lo siguiente
"{"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"}"
Cuando elimino el argumento params del@PostMapping
Anotación Recibo un error más general, dirá que no puede encontrar el primer parámetro requerido (inicio), mientras que realmente se envía junto con los parámetros final, horas y nombre de usuario.
¿Cómo obtener param en el método post spring mvc?
He leído en esta publicación que@RequestParam
solo se puede usar para obtener métodos, pero si elimino@RequestParam
y seguir con el argumento de los params del@PostMapping
anotación todavía no funciona. Sé que puedo usar@RequestBody
pero no quiero hacer una clase solo para esos 4 parámetros. ¿Alguien puede decirme cómo puedo hacer que esto funcione?
Gracias
EDITAR: estoy leyendo aquíhttps://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params-- que el argumento no es exactamente lo que pensé que era. Parece ser usado como una condición. Si un conjunto de parámetros coincide con un valor, se activará el método del controlador del punto final.