Spring MVC并使用Jackson获得查询参数

时间:2019-03-04 12:52:36

标签: spring spring-boot spring-mvc get jackson

我正在尝试将其他查询参数捕获到Map<String,String> 例如:http://url.example/route?lastIndex=10&sort=-afield&othera=test&otherb=test 我希望将otheraotherb存储在地图中。有可能吗?

class MyRequest {
   private String lastIndex;
   private String sort;
   private Map<String,String> myFilters;
}

@RestControler
class MyController {
   @GetMapping("/route")
   public String get(MyRequest request) {
     return "OK";
  }
}

2 个答案:

答案 0 :(得分:0)

我认为,如果您要使用MyRequest类,它可能会起作用。鉴于这些是 AJAX GET请求(因为它是@RestController),因此可以使用@RequestBody

@RestControler
class MyController {
   @GetMapping("/route")
   public String get(@RequestBody MyRequest request) {
     return "OK";
  }
}

并像这样以JSON形式发送请求,而不使用查询参数:

curl -X GET \
  http://url.example/route/ \
  -H 'Content-Type: application/json' \
  -d '{
  "lastIndex": "var",
  "sort": "there",
  "myFilters":{
    "hello": "there",
    "hello1": "there1"
  }'
}

  

GET请求可以包含正文吗?

关于它的规范有点模糊-您可以在here上阅读更多内容。但是,如果您使用的是AJAX GET请求,则Spring Boot运行时容器(我在Spring Boot 2.0.4.RELEASE中检查了Tomcat,Jetty和UnderTow)支持它们。

答案 1 :(得分:0)

由于MyRequset类仅包含字符串参数,因此使用

之类的方法是明智的。
   @GetMapping("/route")
   public MyRequest get(@RequsetParam Map<String,String> allParams) 

,然后按照您喜欢的方式转换参数映射。