Это для многостраничного / форм-данных энктипа пост-запроса.

я есть этот метод контроллера:

@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"}"

Когда я удаляю аргумент params из@PostMapping аннотация Я получаю более общую ошибку: он скажет, что не может найти первый обязательный параметр (начало), пока он действительно отправляется вместе с параметрами конец, часы и имя пользователя.

как получить параметр в методе post spring mvc?

Я прочитал в этом посте, что@RequestParam может использоваться только для получения методов, но если я удаляю@RequestParam и придерживаться аргумента params@PostMapping аннотация это все еще не работает. Я знаю, что могу использовать@RequestBody но я не хочу делать класс только для этих 4 параметров. Может кто-нибудь сказать мне, как я могу сделать эту работу?

Спасибо

РЕДАКТИРОВАТЬ: я читаю здесьhttps://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params-- что аргумент params не совсем то, что я думал. Кажется, используется как условие. Если набор параметров соответствует значению, то будет активирован метод контроллера конечной точки.

Ответы на вопрос(3)

Ваш ответ на вопрос