java 方法参数类型String所需的请求参数'searchQuery'不存在]

mw3dktmi  于 2023-01-07  发布在  Java
关注(0)|答案(4)|浏览(201)

我试着写一个搜索函数,但是当我把搜索查询从前端传递到后端时,我遇到了一个bug。我试了互联网上的大多数解决方案,但是仍然不行。
完成错误日志
2022年10月12日15:05:10.575警告21272---[nio-8090-exec-2]. w.s.m.s.默认处理程序异常解决程序:已解决[组织。springframework。web。绑定。缺少服务请求参数异常:方法参数类型String所需的请求参数'searchQuery'不存在]
前端

<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>

SearchRecordController.java

@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);
    }
}
nue99wik

nue99wik1#

这不是通过axios发送参数的正确方法。你可以通过改变你的前端代码来发送参数:-

axios.post(`api/searchRecord`, null, { params: {
  searchQuery
}}

它将以如下形式发送请求:https://localhost:8080/api/searchRecord?searchQuery =搜索文本的值
保持控制器不变,因为后端不需要更改。

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

这样就可以解决代码中的问题。

izj3ouym

izj3ouym2#

从后端方面看,它似乎可以,我认为你需要发送数据后,像这样:

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

    }
hpcdzsge

hpcdzsge3#

基本上,当你没有从前端发送任何值,但是你的控制器期望从前端发送一些参数时,就会出现这种情况,为了避免这种情况,你可以使用“required = false”,或者你可以根据你的要求来确定一个默认值,以检查你哪里出错了。

public String searchRecord(@RequestParam(value = "searchQuery",required = false,defaultValue = "") String searchQuery) {
        return searchRecordService.searchRecordService(searchQuery);
    }
o2rvlv0m

o2rvlv0m4#

前端未向控制器发送数据。请尝试提供默认值=null;

相关问题