Ausgabe
Ich versuche, eine Suchfunktion zu schreiben, aber ich stoße auf einen Fehler, wenn ich die Suchanfrage vom Frontend zum Backend übergebe. Ich habe die meisten Lösungen im Internet ausprobiert, aber es ist immer noch nicht in Ordnung.
Vollständiges Fehlerprotokoll
12.10.2022 15:05:10.575 WARN 21272 — [nio-8090-exec-2] .wsmsDefaultHandlerExceptionResolver : Behoben [org.springframework.web.bind.MissingServletRequestParameterException: Erforderlicher Anforderungsparameter „searchQuery“ für Methodenparametertyp String ist nicht hier]
Frontend
<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);
}
}
Lösung
Es ist nicht die richtige Art, Parameter über Axios zu senden. Sie können Parameter senden, indem Sie Ihren Code im Frontend ändern in: –
axios.post(`api/searchRecord`, null, { params: {
searchQuery
}}
Welche sendet die Anfrage als: https://localhost:8080/api/searchRecord?searchQuery=valueofsearchtext
Belassen Sie Ihren Controller so, wie er ist, da im Backend keine Änderungen erforderlich sind.
@CrossOrigin
@PostMapping(value = "api/searchRecord")
@ResponseBody
public String searchRecord(@RequestParam(value = "searchQuery") String searchQuery) {
System.out.println(searchQuery);
return searchRecordService.searchRecordService(searchQuery);
}
Dies sollte das Problem in Ihrem Code sortieren.
Beantwortet von – Sumit
Antwort geprüft von – Mildred Charles (FixError Admin)