Spring rest контроллер для фильтрации ресурса - PullRequest
0 голосов
/ 26 мая 2018

В моем весеннем загрузочном приложении у меня есть вопрос в качестве ресурса со следующими полями.

    [  
       {  
          "questionId":6,
          "area":"TECHNICAL",
          "title":"Find the index of first 1 in an infinite sorted array of 0s and 1s",
          "description":"Given an infinite sorted array consisting 0s and 1s. The problem is to find the index of first 1 in that array. As the array is infinite, therefore it is guaranteed that number 1 will be present in the array.",
          "state":"ACTIVE",
          "difficultyLevel":"EASY",
          "skills":[  
             {  
                "skillId":1,
                "skillName":"ALGORITHM"
             },
             {  
                "skillId":2,
                "skillName":"PROGRAMMING"
             }
          ],
          "proposedBy":"agrawalo",
          "noOfTimesUsed":0,
          "examples":null,
          "probes":null,
          "approvedBy":null,
          "addedBy":null,
          "dateCreated":"2018-05-16T19:29:11.113",
          "dateLastUpdated":"2018-05-16T19:29:11.113"
       }, 
       {
        ...
       },
       ...
    ]

Я хочу написать контроллеры для фильтрации вопросов.

Например:

1. / questions? Area = "технические".Контроллер, который возвращает вопросы с областью как «техническую».Для этого я написал следующий метод.

@RestController
public class QuestionController { 
    @RequestMapping("/questions",  method = GET)
    String getFilteredQuestions(@RequestParam("area") String questionArea) {

    }
}

2. / questions? Area = "technical" & skill = "программирования".Теперь я хочу написать контроллер, который возвращает вопрос с областью как «технический» и навык как «программирование».

Один из способов добиться этого - добавить еще один параметр запроса к методу getFilteredQuestion.

Но на этом я в конечном итоге напишу очень грязный код (скажем, хочу ли я добавить больше фильтров), который проверяет, какой параметр запроса имеет значение null, а какой нет, и на основе этого применяют фильтры.

@RestController
public class QuestionController {
    @RequestMapping("/questions",  method = GET)
    String getFilteredQuestions(@RequestParam("area") String questionArea, @RequestParam("skill") String questionSkill) {

    }
}

3. / questions? Skill = "алгоритма" & предложилby = "agrawalo" ...

Любой чистый способ написания таких контроллеров?

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

Создайте Java POJO со всеми параметрами запросов и фильтров, которые вы поддерживаете.Убедитесь, что вы можете сопоставить этот POJO с JSON и наоборот.Ваш клиент может отредактировать версию JSON и отправить ее вместе с запросом.Вы отображаете его обратно в свой POJO и передаете его бизнес-логике, которая заботится о подготовке соответствующего запроса.Таким образом, вы можете оставить методы вашего контроллера нетронутыми.

0 голосов
/ 26 мая 2018

Может быть, вы можете написать класс вопросов как класс сущностей.

public class Question {
         private String title;
         private String description;
         private List<String> skills;
         private Date createdAt;

         public void setTitle(String title) {
             this.title = title;
         }
         public String getTitle() {
             return this.title;
         }

    }

И тогда вы можете получить свои данные вот так

@RestController
public class QuestionController {
    @RequestMapping("/questions",  method = GET)
    String getFilteredQuestions@RequestBody Question question) {

    }
}
0 голосов
/ 26 мая 2018

Ваш запрос вызова был неверным, пожалуйста, позвоните, как показано ниже

/questions?area=technical
/questions?area=technical&skill=programming
...