-1

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.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
M G
  • 35
  • 7

2 Answers2

0

this is how i did it:

if (CollectionUtils.isNotEmpty(lastName)) {
        Criteria lastNameCriteria = new Criteria();
        lastNameCriteria = lastNameCriteria.where("lastName").in(lastName.toArray());
        criterias.add(lastNameCriteria);
    }
M G
  • 35
  • 7
0

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]

Michael Gantman
  • 7,315
  • 2
  • 19
  • 36