You need to enable JavaScript to run this app. Thymeleaf表单对接GetMapping,无重定向接收输入查询数据库
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf表单对接GetMapping,无重定向接收输入查询数据库

酒店搜索去重定向改造实现

核心逻辑说明

你现在的实现多了一次完全没必要的重定向:表单本来就会把GET参数直接发给/search接口,完全没必要在这个接口里拿了参数再跳一次到路径格式的地址。只要把/search接口的逻辑从“中转参数跳走”改成“直接查库返回结果”,就能完全去掉中间跳转步骤。

具体实现步骤

  1. 表单配置确认
    你当前的表单代码完全不需要修改action配置:
    <form data-th-object="${findHotel}" method="get" data-th-action="@{/search}">
      <input class="searchBoxTextEditor" type="text" placeholder="Enter name of the hotel" data-th-field="*{name}">
      <input type="submit" value="find">
    </form>
    
    因为这是GET方法提交的Thymeleaf表单,data-th-field="*{name}"会自动给输入框生成name="name"属性,用户输入内容提交时,浏览器会自动生成类似/search?name=用户输入的酒店名的请求,直接匹配/search路径的接口,不需要额外调整表单路径。
  2. 控制器逻辑调整
    删掉原来的重定向逻辑,直接让/search接口承担查询和结果返回的职责,原来带路径变量的/search/{text}接口可以直接移除。调整后的控制器代码示例:
    @GetMapping("/search")
    public String getSearchResult(FindHotel findHotel, Model model) {
        // 直接获取表单绑定的酒店名参数,不需要手动从路径取值
        String keyword = findHotel.getName();
        List<Hotel> matchHotels = hotelService.findHotelByNameLike(keyword);
        model.addAttribute("hotels", matchHotels);
        // 直接返回结果页,不做任何重定向
        return "hotels";
    }
    

常见踩坑提醒

  • 不要尝试修改表单action为/search/就指望输入值自动拼到路径上:原生HTML表单没有这种自动替换路径占位符的能力,所有GET提交的参数都会被拼到URL后面的查询串里,要是硬要实现路径格式的URL且不跳转,就得写JS拦截提交事件手动拼路径,反而提升了代码复杂度,不如直接用查询参数的形式。
  • 改造后整个搜索链路仅需1次请求:用户输入关键词提交 → 后端直接接参、查库、返回结果页,没有302跳转带来的额外加载耗时。

内容的提问来源于stack exchange,提问作者Iroofeee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 19:15:07