Отправка списка сложных объектов через параметры Http в контроллер Spring MVC Rest

Мой POJO

public class SearchCriteria {
    private String key;
    private String operation;
    private Object value;

    default constructor, parameters constructor, setters and getters....
}

Подпись моего метода RestController.

@GetMapping("/subscribers")
public ResponseEntity<List<SubscriberDTO>> getAllSubscribers(Pageable pageable,
    @RequestParam(name = "lstSearchCriteria", required = false) List<SearchCriteria> lstSearchCriteria)

Теперь я хочу иметь возможность передавать через HttpParams список критериев поиска, необходимых для метода getAllSubscribers ().

Я пробовал несколько разных способов сделать это, но либо беру: Не удалось преобразовать значение типа java.lang.String в исключение требуемого типа java.util.List

или список пуст

Любая помощь очень ценится

Является ли ваш класс SearchCriteria сериализуемым?

Bsquare ℬℬ 13.01.2019 12:28

Нет, это не так ... это проблема!?!? У меня есть метод перегрузки, который я впервые сделал, в котором List <SearchCriteria> отправляется через тело ... но мне сказали, что практика была плохой практикой, и я должен вместо этого отправить List <SearchCriteria> через HttpParams. И версия с перегрузкой, где параметры передаются по телу, работает нормально .. Я отправил их в формате Json, кстати

Bruno Miguel 13.01.2019 13:01

Это зависит от того, как вы добавляете параметры поиска в url. Общий способ - реализовать собственный HandlerMethodArgumentResolver и зарегистрировать его. Но сначала учтите, что преобразование типа применяется автоматически, если тип параметра целевого метода не является String, и вы можете настроить преобразование типа через WebDataBinder или зарегистрировав средства форматирования с помощью FormattingConversionService. См. docs.spring.io/spring/docs/current/spring-framework-referenc‌ e /…

VitalyZ 13.01.2019 14:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
319
1

Ответы 1

Спасибо, ребята, за ответы.

Я использовал другой подход, и я хотел бы, чтобы вы, ребята, прокомментировали его правильность.

Теперь подпись метода RestController:

 public ResponseEntity<List<SubscriberDTO>> getAllSubscribers(Pageable pageable,
    @RequestParam(name = "jsonSearchCriteriaList", required = false) String jsonSearchCriteriaList)

И через API Джексона я создаю список из нового класса Util, созданного для этой цели ...

 ObjectMapper mapper = new ObjectMapper();
 mapper.readValue(json, new TypeReference<List<SearchCriteria>>(){});

А дальше все работает как положено!

Что вы думаете?

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