Предоставить объект POJO в виде сериализованной строки в REST API Request Payload - PullRequest
1 голос
/ 30 апреля 2020

У меня есть REST API uploadFeed, который загружает пользовательский канал на основе feedType (строковое значение берется как часть тела запроса). Различный тип канала обеспечивает совершенно другую модель pojo в теле запроса.

Например, если feedType имеет значение «TYPE1», тело запроса API должно выглядеть следующим образом:

{
 "feedType":"TYPE1",
 "inputModel": {
    "a": "somevalue"
    "b" : "somevalue",
    "c" : "somevalue",
  }
}

если feedType, скажем, «TYPE2», то тело запроса API должно выглядеть следующим образом:

{
 "feedType":"TYPE2",
  "inputModel": {
    "x": "somevalue"
    "y" : "somevalue",
    "z" : "somevalue",
  }
}

Теперь я хочу избежать предоставления различных конечных точек API REST для двух типов feedType. Я имею в виду скорее предоставление сериализованного объекта inputModel в качестве входных данных, а затем десериализацию в бэкэнде на основе feedType. Для .eg

{
 "feedType":"TYPE2",
  "inputModel": "<<serialized object>>"
}

Это хороший дизайн REST API или есть лучшая альтернатива.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Вы можете использовать JSONObject

принять json в виде строки в API и проанализировать его в JSONObject и использовать в соответствии с вашими логами c

@RequestBody String jsonString
JSONObject jsonObj = new JSONObject(jsonString);

Подробнее о JSONObject здесь и здесь .

0 голосов
/ 30 апреля 2020

Вы можете создать класс для сопоставления запроса обратной связи с полем Map для inputModel,

class FeedbackRequest{
   String feedType;
   Map<String, String> inputModel;
   //getters setters
}
...