Как разрешить параметры URL-адреса в контроллере загрузки Spring

- это мой URL

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

- вот мой код контроллера: Код контроллера

** - я вижу ошибку **

 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:

2
0
149
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

в вашем URL-адресе вы передаете параметры запроса как все свойства, но модель ожидает тело, как показано ниже: поэтому создайте класс модели, установите все значения, а затем вызовите контроллер с передачей класса модели.

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

Если вы не хотите передавать multiSelector в качестве тела запроса, вы можете прочитать его как строку в контроллере, а затем использовать Gson или Jackson для преобразования его в объект java.

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

Однако я бы передал JSON в качестве тела запроса.

Вы можете использовать следующий код:

@PostMapping public void test (модель @RequestBody MyModel) {

}

Не передавайте multiSelector в качестве параметра URL, вместо этого отправьте этот json через тело запроса.

Другие вопросы по теме