java - @RequestMapping 参数在路径中间

标签 java spring jsp url spring-mvc

假设我在以下 URL 上显示 id = 1 的学术团体的日程安排:http://localhost:8222/schedule?groupId=1

在此页面上,我有用于从时间表中删除特定类(class)的按钮。 JSP中Button的action属性有如下值:"schedule?${pageContext.request.queryString}/delete/${lessons[count].id}",所以单击 id = 1 类(class)附近的“删除”按钮会导致重定向到此 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;
}

但这不起作用,这个方法永远不会被调用。如何正确编写此方法以实现我想要实现的目标?

最佳答案

?groupId这样使用groupId之后,groupId就变成了一个参数,URL后面的部分就变成了它的值。因此,如果您不想更改现有的 URL 模式,您的请求处理方法应如下所示:

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

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

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

 1/delete/2

现在你必须解析它是否有 groupId 和 lesson 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;
 }

了解更多:

关于java - @RequestMapping 参数在路径中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950686/

相关文章:

java - 强制完全重绘 Jpanel Java2D

javascript - 通过ajax将多个数据从servlet传递到jsp

java - 如何在 Struts ValueStack 中设置 EL 变量

java - DelegatingFilterProxy 的单独 Spring 上下文

java - 搜索包含所有特殊字符的数据库表

java - 事务更改的子集有时在提交后不久不可见

java - Struts 在页面加载时调用操作

java - @PathVariable ("ownerId") String theOwner 和@PathVariable String theOwner 的区别

java - 压缩 ArrayList 方法中的错误

java - Ant 的 <property> "prefix"属性的 Maven 对应项是什么?