Spring MVC接收URL参数时出现Error 400问题求助
从你的描述来看,核心问题出在请求路径不匹配,其次可能存在参数配置的细节问题,我们一步步来解决:
首先看你的请求URL:http://localhost:80000/xxx/xxx/tickets/search?codprovincia=28&municipio=110000,路径部分是/xxx/xxx/tickets/search,但你第一个控制器的配置是:
- 类级
@RequestMapping("/xxx") - 方法级
@RequestMapping("tickets")
这意味着这个方法对应的路径是/xxx/tickets,和你请求的路径完全不匹配,Spring找不到对应的处理方法,自然返回400错误。
接下来是具体的修复方案:
1. 修正控制器的路径映射
调整类和方法的@RequestMapping,让它完全匹配你的请求路径:
@Controller @RequestMapping(value = "/xxx/xxx" ) // 对应URL中的前两个/xxx public class BuscadorIncidenciasController extends BaseControllerWeb { // 方法级映射对应/tickets/search,指定GET方法更严谨 @RequestMapping(value = "tickets/search", method = RequestMethod.GET) public String tickets(Model model, // 如果参数是必传的可以去掉required=false,否则加上避免无参数时报错 @RequestParam(value = "codprovincia") String codprovincia, @RequestParam(value = "municipio") String municipio, HttpServletRequest request) throws NoAjaxException { // 你的业务逻辑 return CONST.JSP_VIEW; } ... }
2. 排查参数相关的潜在问题
如果调整路径后还是报400,需要检查以下几点:
- 参数名拼写一致:确保
@RequestParam里的参数名和URL中的完全一致(大小写敏感),比如不要把codprovincia写成codProvincia。 - 参数类型匹配:你第二个例子用
Integer接收参数,如果第一个例子里的参数是数字,用String接收没问题,但如果后续要转数字,要处理格式错误;如果直接用Integer接收,要确保URL里的参数是有效的数字,否则会触发类型转换错误导致400。 - 非必传参数配置:如果这两个参数不是每次请求都必须传,一定要加上
required=false,或者给默认值,比如@RequestParam(value = "codprovincia", required = false, defaultValue = "0") String codprovincia,否则当URL里没有这些参数时,Spring会因为找不到必填参数返回400。
3. 验证请求格式
确保你的URL里的参数分隔符是&,而不是&(&是HTML转义后的字符,直接在浏览器地址栏里用的话应该用&;如果是在HTML页面的链接里,转义是对的,但浏览器会自动解析成&发送请求,不过最好确认实际发送的请求参数是否正确)。
按照这个步骤调整后,应该就能正常接收参数了。
内容的提问来源于stack exchange,提问作者Donsanudo
相关产品推荐
相关产品推荐

