I'm trying to build a multifunctional search method using MongoTemplate, Query and Criteria.
Here is my RequestMapping for variable search:
public Page<Users>getUsers(
@RequestParam(value = "name", required = false)
String name) {
Query query = new Query();
Criteria criteria = new Criteria();
criteria = criteria.where("name").regex(".*" name ".*","i");
query.addCriteria(criteria);
I want to be able to search lastName with multiple request parameters. For example, I want to find everyone with lastname "Smith" and "Johnson".
Something like this:
@RequestParam(value = "lastName", required = false) List<String> lastName) {
Query query = new Query();
Criteria criteria = new Criteria();
criteria = criteria.where("lastName").regex(do something different..);
query.addCriteria(criteria);
URL will be: http://localhost:8080/get?lastName=Smith&lastName=Johnson
This is where I found Mapping a Multi-Value Parameter https://www.baeldung.com/spring-request-param , but it is not clear how exactly does it work. If someone can provide a link with full example (repository, handler and stuff), please do.
CodePudding user response:
this is how i did it:
if (CollectionUtils.isNotEmpty(lastName)) {
Criteria lastNameCriteria = new Criteria();
lastNameCriteria = lastNameCriteria.where("lastName").in(lastName.toArray());
criterias.add(lastNameCriteria);
}
CodePudding user response:
In the article that you mentioned at the end there is a precise answer to your question:
A single @RequestParam can have multiple values:
@GetMapping("/api/foos") @ResponseBody public String
> getFoos(@RequestParam List<String> id) {
> return "IDs are " id; }
And Spring MVC will map a comma-delimited id parameter:
http://localhost:8080/spring-mvc-basics/api/foos?id=1,2,3 ---- IDs are [1,2,3] or a list of separate id parameters:
http://localhost:8080/spring-mvc-basics/api/foos?id=1&id=2 ---- IDs are [1,2]
