I have a RestController that returns all users from the database in JSON format :
@RequestMapping(path="users", method=RequestMethod.GET)
public List<User> getAllUsers(){
return userService.getAllUsers();
}
I have an input field that I want to autocomplete when typing the name of the user :
<input id="user" type="text">
The Ajax call :
$("#user").keyup(function(e) {
var username = e.target.value;
delaySearch && clearTimeout(delaySearch);
delaySearch = setTimeout(() => {
var url="/clients/";
$.getJSON(url, function(data){
..?
}
}, 200);
});
}
How do I make it filter through the users returned from the controller ? Do I need a different controller that takes an input the letters in the input field ? I'm a beginner, so I'm sorry if it's a simple question. The User class has one field String for Name and one field for Last Name. I would need both to show . Thank you in advance!!
Your getAllUsers
method will need to take a parameter, and then you need to filter the results obtained from .getAllUsers() method:
@RequestMapping(path="users", method=RequestMethod.GET)
public List<User> getAllUsers(@RequestParam String name){
List<User> results = userService.getAllUsers();
return results.stream.filter( user -> user.contains(name)).collect(Collectors.toList());
}
And then you need to filter the results by the parameter.
But you really probably don't want to run it like this, you could potentially be passing around very long lists of Users for every single key stroke. I would suggest implementing a .getAllUsersContaining(String name)
method for querying your DB or however you're storing your data