You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring后端接收前端searchQuery参数缺失问题求助

问题:搜索功能前端参数无法传递到后端

我在开发搜索功能时,遇到前端搜索查询参数无法传递到后端的问题,试了网上大部分方案都没解决。下面是完整错误日志、前端Vue代码和后端Spring Controller代码:

完整错误日志

2022-10-12 15:05:10.575 WARN 21272 --- [nio-8090-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'searchQuery' for method parameter type String is not present]

前端Vue代码

<template>
<div class="input-group mb-3">
        <input type="search" class="form-control rounded" v-model="searchQuery" placeholder="Company name" aria-label="Search" aria-describedby="search-addon" />
        <button type="button" class="btn btn-outline-primary" @click='searchRecord'>Search</button>
    </div>
</template>
<script>
import axios from 'axios'

export default {
    name: 'RegistrationEnquiry',
    components: {

    },
    data() {
        return {
            records: [],
            searchQuery: '',
        };
    },
    computed: {},
    methods: {
        searchRecord(){
            axios.post('searchRecord', this.searchQuery)
            .then(successResponse => {
                console.log(successResponse)
                })
                .catch(failResponse => {
                    alert("Error(failResponse)")
                    console.log(failResponse)
                })

        },
    },
}

</script>

后端Spring Controller代码

@Controller
public class SearchRecordController {
    @Autowired
    SearchRecordService searchRecordService;

    @CrossOrigin
    @PostMapping(value = "api/searchRecord")
    @ResponseBody
    public String searchRecord(@RequestParam(value = "searchQuery") String searchQuery) {
        System.out.println(searchQuery);
        return searchRecordService.searchRecordService(searchQuery);
    }
}

问题原因及修复方案

问题1:请求路径不匹配

后端接口路径是/api/searchRecord,但前端请求写的是searchRecord,会导致请求发送到当前页面路径下的searchRecord,而非后端的API接口。

问题2:参数传递方式不匹配

后端用@RequestParam接收URL参数或表单参数,但前端直接将字符串作为请求体发送,后端无法识别为searchQuery参数。


修复方案一:前端调整参数传递方式(后端保持不变)

修改前端searchRecord方法,将参数放在params中传递,或者用表单格式传递:

方式1:使用axios的params参数

searchRecord(){
    axios.post('/api/searchRecord', {}, {
        params: {
            searchQuery: this.searchQuery
        }
    })
    .then(successResponse => {
        console.log(successResponse)
    })
    .catch(failResponse => {
        alert("Error")
        console.log(failResponse)
    })
}

方式2:使用URLSearchParams传递表单格式参数

searchRecord(){
    const params = new URLSearchParams();
    params.append('searchQuery', this.searchQuery);
    axios.post('/api/searchRecord', params)
    .then(successResponse => {
        console.log(successResponse)
    })
    .catch(failResponse => {
        alert("Error")
        console.log(failResponse)
    })
}

修复方案二:后端改为接收请求体(前端调整参数格式)

后端修改:用@RequestBody接收请求体

@Controller
public class SearchRecordController {
    @Autowired
    SearchRecordService searchRecordService;

    @CrossOrigin
    @PostMapping(value = "/api/searchRecord")
    @ResponseBody
    public String searchRecord(@RequestBody String searchQuery) {
        System.out.println(searchQuery);
        return searchRecordService.searchRecordService(searchQuery);
    }
}

前端修改:传递JSON格式参数

searchRecord(){
    axios.post('/api/searchRecord', { searchQuery: this.searchQuery })
    .then(successResponse => {
        console.log(successResponse)
    })
    .catch(failResponse => {
        alert("Error")
        console.log(failResponse)
    })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:05:23