2017-10-11 61 views
0

我目前正在試圖建模JSON API的查詢參數結構,並將其應用到我的Spring Boot項目中。我將關注filters,排序,分頁和可能的字段限制。如何在Spring中爲JSON API建模自定義請求參數?

我想先下手過濾,所以我想我的REST端點能夠處理像

GET /comments?filter[post]=1 HTTP/1.1 

GET /comments?filter[post]=1,2 HTTP/1.1 

GET /comments?filter[post]=1,2&filter[author]=12 HTTP/1.1 

JSON-API風格的URL請求,我的計劃是捕獲所有JSON API特定的查詢參數頂級JsonApiParams對象,如:

public class JsonApiParams { 
    private Filters filters; 
    private Sorting sorting; 
    private Paging paging; 

    // getters, setters 
} 

然後模擬出FiltersSortingPaging爲好。這JsonApiParams對象將隨後在我@RestController端點像這樣被接受的請求PARAM:

@RequestMapping(value = {"/api/v1/{entity}"}, 
      method = RequestMethod.GET, 
      produces = {"application/vnd.api+json"}) 
@ResponseBody 
public JsonApiTopLevel jsonApiGetByEntity(@PathVariable String entity, JsonApiParams params) { 
    // convert params to DB query 
} 

所以,我應該如何建模我JsonApiParams對象能夠處理像上面(例如,/comments?filter[post]=1,2&filter[author]=12)中的那些要求?

回答

0

幸運的是,Spring開箱即用地圖使用括號符號。我能格式化我的網址查詢參數這樣/comments?filter[post]=1,2&filter[author]=12以下模型:

public class JsonApiParams { 
    private Map<String, List<String>> filter; 
    private List<String> sort; 
    private Map<JsonApiPaginationKeys, Integer> page; 

    // getters & setters 
} 

然後,在我的情況,我轉換的過濾器,以一個QueryDSLPredicate,並sortpage領域進入春季Pageable請求。輕鬆轉換並無縫工作。

相關問題