Прежде всего, я бы хотел, чтобы все было просто.
Возможно, измените свой контроллер следующим образом. Важно, чтобы вы указали контроллеру, какие параметры вы хотите обработать. Вы можете использовать @RequestParam или @PathVariable, чтобы сообщить контроллеру, какие данные вы хотите отправить ему.
@RequestMapping(value="/findUsers")
public @ResponseBody String findUsers (
@RequestParam (required=false) String name,
@RequestParam (required=false) String surname) {
... // do something with the params
return "everything worked fine";
}
Здравый смысл говорить контроллеру, что он отвечает за всю часть доменапоскольку это делает ваш код более понятным.
@Controller
@RequestMapping(value="/user")
Если вы сделаете это так, вам не понадобится косая черта в вашей функции.
@RequestMapping(value="findUsers")
Таким образом, URL запроса будет "mydomain.com/user/findUsers "
Также важно, чтобы в вашем html-коде для полей ввода был установлен атрибут name, поскольку это имя параметра, на который ссылается контроллер при проверке запроса. В противном случае ваш контроллер не будет знать, какие параметры он будет обрабатывать. Вот так
<input type="text" placeholder="name" id="name" value="name" name="name">
И последний, но не менее важный, ваш ajax-запрос. Обычно вам не нужно указывать тип данных ответа, так как он будет выбран автоматически. URL-адрес не написан напрямую, потому что таким образом, URL-адрес всегда будет работать неважно, если вы находитесь в среде тестирования или в вашей действующей системе. Вы можете импортировать JSTL, используя этот тег.
var name = $("#name").val();
var surname = $("#surname").val();
$.ajax({
type: "POST",
url: "<c:url value='/user/findUsers' />",
data: {name: name, surname: surname},
success: function(result) {
... // do something on success
},
error: function(error) {
... // catch error
}
});
Это прекрасно работает для меня даже с гораздо более сложными вариантами.