Spring rest controller用于过滤资源

时间:2018-05-26 11:50:24

标签: java rest spring-boot spring-restcontroller

在我的春季启动应用程序中,我有一个问题作为资源,包含以下字段。

    [  
       {  
          "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= “技术” &安培;技能= “编程”。现在,我想编写一个控制器,返回问题,区域为“技术”,技能为“编程”。

我可以通过向“getFilteredQuestion”方法添加一个请求参数来实现此目的。

但有了这个,我最终会编写一个非常混乱的代码(比如说我想添加更多过滤器),它会检查哪些请求参数为空,哪些不是,并且基于应用过滤器。

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

    }
}

3./questions?skill=“algorithm”& proposedby =“agrawalo”......

编写此类控制器的任何干净方式?

3 个答案:

答案 0 :(得分:1)

使用您支持的所有查询和过滤器参数创建Java POJO。确保您可以将POJO映射到JSON,反之亦然。您的客户端可以编辑JSON版本并将其与请求一起发送。您将其映射回POJO并将其传递给负责准备相应查询的业务逻辑。这样,您就可以保持控制器的方法不受影响。

答案 1 :(得分:1)

也许您可以将Question类编写为实体类。

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) {

    }
}

答案 2 :(得分:-1)

您的请求来电错误,请致电如下

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