Поиск запроса POST REST API с использованием механизма весеннего загрузочного фильтра - PullRequest
0 голосов
/ 21 июня 2020

TechStack:

java springboot mongodb restapi

Текст запроса на публикацию

{
    firstName:"john",
    lastName:"abraham",
    age:28,
    gender:"male",
    skinColor:"dark",
    country:"denmark"
}

Мой объект поиска, содержащий тело запроса POST

class SearchCriteria{
    firstName,
    lastName,
    age,
    gender,
    skinColor,
    country
}

Мой контроллер:

class UserController {

UserService userService;

@PostMapping("getUsers")
List<User> getUsers(@RequestBody SearchCriteria searchCriteria){
    userService.fetchUsers(searchCriteria);
}

}

Моя служба:

класс UserService {

List<User> fetchUsers(SearchCriteria searchCriteria){
    if(firstName.isNotBlank && )
}

}

Мой поиск требования:

searchByFirstName searchByLastName searchByAge searchByGender searchByAgeAndGender

если я получаю любую комбинацию, отличную от указанной выше, я должен вывести сообщение об ошибке неподдерживаемый критерий поиска.

Примеры:

Принятые поиски:

searchByFirstName

{
    firstName:"john",
}

searchByFirstName

{
    lastName:"kumar",
}

searchByAgeAndGender

{
    age:30,
    gender:"female"
}

Недопустимые комбинации поиска, поскольку я не предоставляю реализации:

{
        firstName:"john",
        lastName:"kumar",
        age:28
}
    

{
    age:30,
    gender:"female"
    country:"canada"
}

Чтобы добиться этого, я должен использовать mult iple if else блокирует, что я должен чертовски много кода и логики. Есть ли лучший способ ограничить комбинацию фильтров? Я мог бы использовать несколько сопоставлений GET для навигации, как показано ниже

getUsers / Byname /

код для фильтра с использованием Name

getUsers / uniqueSocialNumbe r

код для фильтрации с использованием ssn

Но в существующем приложении невозможно изменить существующие реализации. В идеале мне нужен какой-то механизм для чтения параметров запроса searchCriteria и для определения комбинаций для поиска в моем хранилище данных

Приветствуйте вашу помощь! Спасибо!

...