Spring Boot中href路径访问后Controller方法无响应求助
Hey there! As a fellow Spring Boot developer, I’ve run into similar gotchas when starting out—let’s walk through the possible issues and fixes step by step:
1. Mismatched HTTP Request Method (The Big One)
Your <a> tag sends a GET request by default, but your controller method is explicitly configured to only accept POST requests via method=RequestMethod.POST.
Wait, you mentioned the method is executing—so double-check if you have an accidental GET mapping for the same /updateAlertsUser URL elsewhere in your controller. If not, your browser should be throwing a 405 Method Not Allowed error (check your browser’s network tab to confirm the request type and response status).
2. Thymeleaf URL Resolution Check
Make sure your HTML page includes the Thymeleaf namespace at the top:
<html xmlns:th="http://www.thymeleaf.org">
Without this, the @{/updateAlertsUser} expression won’t be parsed into the correct endpoint URL. Your browser might be trying to hit a literal path like http://your-app/@{/updateAlertsUser} instead of the actual mapped endpoint. Verify the resolved URL by right-clicking the link and copying its address, or checking the network tab in dev tools.
3. Void Return Type Leaves the Browser Hanging
Your controller method has a void return type. After executing userAlertsService.deleteLogic(userAlertsDto), Spring sends an empty response back to the browser—so the page doesn’t reload, redirect, or show any feedback, making it seem like "nothing happened".
Fix this by returning a redirect to the original page or a success page:
@RequestMapping(value="/updateAlertsUser", method=RequestMethod.POST) public String updateAlertsUser(@ModelAttribute("userAlerts") @Valid UserAlertsDto userAlertsDto, BindingResult result, Principal principal, Model model) { if (log.isInfoEnabled()) { log.info("Intentando actualizar las alertas vistas por el usuario"); } // Check for validation errors first! if (result.hasErrors()) { // Redirect back to the page with the form to show errors return "redirect:/your-alerts-page"; } userAlertsService.deleteLogic(userAlertsDto); // Redirect to a page the user can see as confirmation return "redirect:/dashboard"; }
4. How to Trigger a POST from an <a> Tag
Since <a> tags default to GET, you need a workaround to send a POST request:
- Option 1: Hidden Form: Wrap the link in a hidden form that submits via POST:
<form th:action="@{/updateAlertsUser}" method="POST" id="updateAlertsForm" style="display: none;"> <!-- Add hidden inputs here if your UserAlertsDto requires data --> <input type="hidden" th:field="*{someField}" /> </form> <a class="nav-link" href="#" onclick="document.getElementById('updateAlertsForm').submit();" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <!-- Your icon/link text here --> </a> - Option 2: AJAX Request: Use JavaScript to send an asynchronous POST request, which lets you handle success/error feedback without reloading the page.
5. Validate Your UserAlertsDto Binding
Don’t forget to check the BindingResult for validation errors! If @Valid finds issues with your UserAlertsDto, the deleteLogic call might never run. Adding the error check (as shown in the controller code above) will help you catch this.
Start with the first two checks—mismatched HTTP method and Thymeleaf resolution—those are the most likely culprits here.
内容的提问来源于stack exchange,提问作者Imrik

