【问题标题】:@RequestMapping can't catch url@RequestMapping 无法捕获 url
【发布时间】:2026-01-23 20:20:10
【问题描述】:

我用表单声明控制器。但是当我使用 Delete url 时,捕获 404 错误

我有一张带代码的表格:

<c:forEach items="${model.books}" var="book">
        <tr align="left" height="100%">
            <td>${book.name}</td>
            <td>${book.description}</td>
            <td>${book.year}</td>
            <td></td>
                <%--<td>${book.authorNames}</td>--%>
            <sec:authorize access="hasRole('ROLE_ADMIN')">
                <td>
                    <a href="${pageContext.request.contextPath}/BookList.vw/${book.id}">Delete</a>
                    <a href="${pageContext.request.contextPath}/EditBook.vw/${book.id}">Edit</a>
                </td>
            </sec:authorize>
        </tr>
    </c:forEach>

还有我的控制器:

@Controller
@RequestMapping("/BookList.vw")
public class BookListController {

    @Autowired
    private IBookService bookService;

    public String getModelName() {
        return "BookList";
    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    protected ModelAndView openMain() throws Exception {
        Map<String, Object> model = new HashMap<String, Object>();
        List<Book> books = bookService.listBooks();
        model.put("books", books);

        return new ModelAndView(getModelName(), "model", model);
    }

    @RequestMapping(value = {"/delete"}, method = RequestMethod.POST)
    public ModelAndView delete(@RequestParam("id") Integer id) throws Exception {
        bookService.removeBook(id);
        return new ModelAndView(getModelName());
    }
}

通过第二个 URL,我也捕获了 404 错误。我不明白为什么。 EditBook 控制器:

@Controller
@RequestMapping("/EditBook.vw")
public class EditBookController{

    @Autowired
    private IBookService bookService;

    @Autowired
    private IAuthorService authorService;


    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    protected ModelAndView openMain(@PathVariable Integer id) throws Exception {
        Map<String, Object> model = new HashMap<String, Object>();
        List<Book> books = bookService.listBooks();
        Book book = new Book();
        for (Book book1 : books) {
            if(book1.getId() == id)
                book = book1;
        }

        model.put("book", book);

        return new ModelAndView("EditBook", "model", model);
    }
}

我尝试在 POST、Get 和其他之间更改它。帮帮我?请

【问题讨论】:

    标签: forms spring-mvc servlets controller


    【解决方案1】:
       @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
        public ModelAndView delete(@PathVariable Integer id) throws Exception {
            bookService.removeBook(id);
            return new ModelAndView(getModelName());
        }
    

    你可以试试这个吗?

    【讨论】:

    【解决方案2】:

    您的控制器声明只有发布请求会执行 delete() 方法。你应该使用

    <form method="post" action="the_delete_URL">
    

    而不是 因为 href 不是帖子。

    【讨论】:

    • 你需要使用表单post而不是href,再次尝试acemerk的方法但使用method = RequestMethod.POST?在您粘贴的堆栈跟踪中清楚地说明了它的 @PathVariable not found 错误。
    最近更新 更多