如何在Spring Boot Controller中解析URL参数

时间:2018-10-11 02:08:45

标签: spring spring-boot

-这是我的网址

http://localhost:8080/estates?pageCount=3&pageIndex=2&multiSelector={roomCountRanges:[{from:3,to:3},{from:4,to:4}]}

-这是我的控制器代码: Controller Code

**-我看到的错误**

 Field error in object 'myModel' on field 'multiSelector': rejected value [{roomCountRanges:[{from:3,to:3},{from:4,to:4}]}];
        codes [typeMismatch.myModel.multiSelector,typeMismatch.multiSelector,typeMismatch.com.centanet.service.model.MultiSelector,typeMismatch];
        arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [myModel.multiSelector,multiSelector];
        arguments []; default message [multiSelector]];
        default message [Failed to convert property value of type 'java.lang.String' to required type 'com.centanet.service.model.MultiSelector' for property 'multiSelector';
        nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'com.centanet.service.model.MultiSelector' for property 'multiSelector': no matching editors or conversion strategy found], 

有什么想法吗? 非常感谢

1

3 个答案:

答案 0 :(得分:0)

在您的网址中,您将请求参数作为所有属性传递,但模型期望如下所示:因此,请创建一个Model类,设置所有值,然后通过传递的模型类调用控制器。

{
  "pageCount": 3,
  "pageIndex": 2,
  "multiSelector": {
    "roomCountRanges": [
      {
        "from": 3,
        "to": 3
      },
      {
        "from": 4,
        "to": 4
      }
    ]
  }
}

答案 1 :(得分:0)

如果您不想将multiSelector作为请求主体传递,则可能希望在控制器中将其作为字符串读取,然后使用GsonJackson将其转换为Java对象。

Gson gson = new Gson(); 
gson.fromJson(multiSelector, MultiSelector.class);

但是,我会将JSON作为请求正文传递。

答案 2 :(得分:0)

您可以使用如下代码:

@PostMapping 公共无效测试(@RequestBody MyModel模型){

}

不要将multiSelector作为URL参数传递,而是通过Request正文发送此json。