@RequestMapping在路径中间带参数

时间:2014-09-20 16:06:17

标签: java spring jsp url spring-mvc

假设我在以下网址显示id = 1的学术群组的时间表:http://localhost:8222/schedule?groupId=1

在此页面,我有按钮,用于删除日程表中的特定课程。 JSP中按钮的action属性具有以下值:"schedule?${pageContext.request.queryString}/delete/${lessons[count].id}",因此单击课程附近“id = 1”的“删除”按钮会导致重定向到此URL:http://localhost:8222/schedule?groupId=1/delete/1

我想要做的是创建一个映射到此URL的方法,该方法执行删除并重定向到包含当前所选组的计划的页面:http://localhost:8222/schedule?groupId=1。这是我试图做的事情:

@RequestMapping(value = "/schedule?groupId={groupId}/delete/{lessonId}")
public String deleteLesson(@PathVariable("lessonId") Integer lessonId, @PathVariable("groupId") Integer groupId) {
    lessonRepository.delete(lessonId);
    return "redirect:/schedule?groupId=" + groupId;
}

但是这不起作用,从不调用此方法。如何正确地编写此方法以实现我想要实现的目标?

1 个答案:

答案 0 :(得分:3)

使用此groupId ?groupId之后,groupId成为参数,网址的后半部分成为其值。因此,如果您不想更改现有的URL模式,请求处理方法应如下所示:

@RequestMapping(value = "/schedule")
public String deleteLesson(@RequestParam("groupId") String restOfTheUrl) {

  log.info(restOfTheUrl);
  // your code
}

记录后,您应该看到,例如:

 1/delete/2

现在您必须解析它以便删除groupId和课程id

但是如果你想以自己的方式处理它,你的代码应该是:

 @RequestMapping(value = "/schedule/groupId/{groupId}/delete/{lessonId}") // convert you request param to path varriable
 public String deleteLesson(@PathVariable("lessonId") Integer lessonId, @PathVariable("groupId") Integer groupId) {
    lessonRepository.delete(lessonId);
    return "redirect:/schedule?groupId=" + groupId;
 }

了解更多信息: