映射的Springboot控制器请求参数始终为null

时间:2018-03-27 04:11:13

标签: spring spring-mvc spring-boot

我试图传递一堆id以创建过滤器。

传入的请求看起来像(忽略分页的东西,效果很好)

http://localhost:8080/news-items?filter%5B%5D=09c731de-7ed8-385d-849c-f4d6535137ab&filter%5B%5D=dd1ba187-2df9-3985-ad1c-a4cde2dfe669&modelPath=controller.newsItems&page=0&per_page=25

过滤器参数等于ID,但有一堆,例如:

filter: [
"09c731de-7ed8-385d-849c-f4d6535137ab",
"dd1ba187-2df9-3985-ad1c-a4cde2dfe669"
],

我似乎无法收集控制器中的过滤器。目前我有

public String getFeeds(@RequestParam(value = "filter", required = false) MultiValueMap<String, String> filter, @RequestParam(value = "page", required = false) int page, @RequestParam(value = "per_page", required = false) int perPage) {
    log.info("Filter: {}", filter);
}

但是过滤器始终为null。我尝试过使用String而不是map,但它也总是为null。

如何以这种方式接受未知数量的参数?我觉得这很简单,但我只是错过了明显的......

2 个答案:

答案 0 :(得分:0)

事实证明这很简单,就像我想的那样。在@RequestParam中使用地图时,它会占用所有传入的参数,无论它们是什么。

所以我可以告诉他们正确的解决办法是做一些像

这样的事情
@GetMapping(produces = APPLICATION_JSON)
public String getFeeds(@RequestParam MultiValueMap<String, String> params) {

    params.forEach(//something);

}

答案 1 :(得分:0)

我认为你要找的只是一个数组或一个List,如下所示:

public String getFeeds(@RequestParam(value = "filter", required = false) List<String> filters) { ... }