Внедрить сложный объект в метод ресурсов в Джерси - PullRequest
0 голосов
/ 30 ноября 2018

Я работаю над сервисом RESTful в Java 8. У меня в классе ресурсов есть следующий метод, который отвечает на POST запросы.

@POST
public Response store(SomeType myInstance){ ... }

Как правило, этот метод десериализовывается без помехв случае, если запрос json может быть сопоставлен напрямую.Однако SomeType в этом случае является сложным объектом, содержащим другие объекты, сохраненные в базе данных.

Есть ли способ перехватить запрос, определить тип, построить объект SomeType и затем передать его в метод store?Я склоняюсь к некоторому типу промежуточного программного обеспечения, но я не совсем уверен, как будут работать зависимости.

Примечание: Из соображений безопасности я очень ограничен в сторонних пакетах, которые я могу использовать.Поэтому я не могу использовать готовые решения.

1 Ответ

0 голосов
/ 02 декабря 2018

Я думаю, что ваш вариант использования может быть решен с помощью функции Джексона CustomDeserializer .

  1. Общий подход заключается в создании класса для каждого входящего типа, который необходимо поддерживать.Ex. SomeType1 , SomeType2 , SomeType3 `.
  2. Все эти классы должны расширять родительский класс SomeType .
  3. Родительский класс SomeType должен иметь CustomDeserializer .
  4. . В CustomDeserializer вы можете проверить поля json, чтобы определить, какой тип jsonследует десериализовать до.
  5. Затем вы можете использовать метод JsonParser.readValueAs , чтобы десериализовать json в нужный тип SomeType1 , SomeType2 ,или SomeType3 .
  6. Если вам нужно получить дополнительные данные из базы данных и заполнить поля SomeType1 , SomeType2 и SomeType3 вы можете сделать это в своем обработчике, проверив тип объекта.

    @POST
    public Response store(SomeType myInstance) {
       if (myInstance instanceof SomeType1) {
         // fetch from database and populate more fields
       } else if (myInstance instanceof SomeType2) {
         ...
       }
       ...
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...