Ошибка при генерации строки в Spring Web MVC

226
07 сентября 2017, 16:44

Есть у меня пара методов, обрабатывающих запросы через Spring MVC.

Выглядят они так:

    @RequestMapping(value = "/update/{id}", method = RequestMethod.GET)
public String update(@PathVariable("id") int id, Model model) {
    Meal meal = get(id);    //отдельный метод
    model.addAttribute("meal", meal);
    return "mealForm";
}
@RequestMapping(value = "/update", method = RequestMethod.POST)
public String update(HttpServletRequest request) {
    int userId = AuthorizedUser.id();
    int id = Integer.parseInt(request.getParameter("id"));
    Meal meal = new Meal();
    meal.setId(id);
    meal.setUser(new User());
    meal.setCalories(Integer.parseInt(request.getParameter("calories")));
    meal.setDescription(request.getParameter("description"));
    meal.setDateTime(LocalDateTime.parse(request.getParameter("dateTime")));
    log.info("update {} with id={} for userId={}", meal, id, userId);
    assureIdConsistent(meal, id);
    service.update(meal, userId);
    return "meals";
}

При вызове ссылки

<td><a href="update/${meal.id}">Update</a></td>

обрабатывает метод @RequestMapping(value = "/update/{id}", method = RequestMethod.GET), потом генерирует View с формой изменения параметров, отправляет его по адресу: http://localhost:8081/topjava/update/100007 и по нажатию Save отправляет POST-запрос в метод @RequestMapping(value = "/update", method = RequestMethod.POST). Проблема в том, что ожидается адрес

http://localhost:8081/topjava/update

(который потом будет обработан вторым методом), а получается

http://localhost:8081/topjava/update/update

то есть, добавляется лишний /update с ошибкой 405 (не находит метод).

Как мне побороть эту проблему и убрать лишний /update?

Answer 1
<a href="${pageContext.request.contextPath}/update/${meal.id}">Update</a>
READ ALSO
Unexpected code path h2 db

Unexpected code path h2 db

Пользуюсь h2 базой данных 14

242
не обновляется foreign key в дочерней таблице

не обновляется foreign key в дочерней таблице

Есть две таблицы, в главной таблице есть столбец name, который является ключем для дочерней таблицыКогда я обновляю name, делаю это так:

194
Вложенные generics

Вложенные generics

Доброго времени суток, решил полезть в generics глубже, чем SomeClass<T>, и наскочил на сложности

209