Карта как значение для параметра запроса в Spring Boot

Я использую модель для параметров запроса для вызова GET.

public class Model{
      private Map<String, Object> myField;
      public Map<String, Object> getMyField(){
          return this.myfield;
      }
      public void setMyField(Map<String, Object> myField){
          this.myField = myField;
      }
}

И мой контроллер:

@RequestMapping(value = "/view",method= RequestMethod.GET,produces = {"application/json"})
@ResponseBody
public ResponseEntity<List<ViewResponse>> view(Model p_request) {}

Это запрос, который я нажимаю на http://localhost:8080/view?myField = {"states":"23"}. Я получаю плохой 400 плохой запрос, а также

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

Что я делаю неправильно?

Передайте объект как параметр запроса, а затем проанализируйте этот объект в своем контроллере.

Nicholas K 02.02.2019 11:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
1 100
1

Ответы 1

От промежуточного класса Model можно избавиться, если в нем нет острой необходимости. Вы можете просто использовать Map для сопоставления всех параметров входного запроса, для этого вам нужно использовать аннотацию spring mvc @RequestParam, например

public ResponseEntity<List<Object>> view(@RequestParam Map p_request) {
}

и тогда вам не нужно отправлять цитируемый http-запрос, запрос станет: http localhost:8080/view\?states=23

Поэтому мне в основном нужен параметр запроса типа фильтров, где я могу применять фильтры ко многим вещам. например: фильтры = {"состояния":[активный, неактивный], "имя":["ABXC", "PQR"]} Что касается модели, на самом деле существуют и другие параметры запроса. Это один из параметров запроса, ключ которого — myField, но само значение — это карта.

Harshit Gupta 02.02.2019 11:17

ok @sagarr, также вы можете использовать для вопроса: public ResponseEntity view(@RequestParam Map p_request) {} :)

ismael 02.02.2019 12:59

Любая конкретная потребность, которую вам нужно передать только как json, я имею в виду, что вы можете использовать параметры req, разделенные запятыми, такие как states=a,b&name=x,y

sagarr 02.02.2019 14:09

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