Какой тип RequestBody следует использовать, если для выполнения другого запроса используется та же полезная нагрузка? - PullRequest
0 голосов
/ 30 марта 2020

Справочная информация
Мы потребляем API от стороннего поставщика

Постановка проблемы :
Я создаю API-оболочку для другого API. Та же самая точная JSON полезная нагрузка, которую я получу от клиента к API-оболочке, также будет использоваться для отправки HTTP-запроса к исходному API.

В настоящее время я конвертирую JSON, который десериализуется в строка. Является ли это правильным подходом, если полезная нагрузка только проходит через API-оболочку к исходному API? Другими словами, подходит ли @RequestBody тип String для моего варианта использования или мне все еще нужно десериализовать в Java объект?

Вариант использования для оболочки
Если несколько команд использовали API стороннего поставщика, все команды должны были бы внести изменения, если бы нам пришлось сменить поставщиков. Если мы создадим оболочку, только одна команда должна будет внести изменения. В этой оболочке нет обработки.

Код контроллера :

@RestController
@RequestMapping(value = FolderController.PATH, produces = MediaType.APPLICATION_JSON_VALUE)
public class PersonController(){
    static final String PATH = "/person";
    private final PersonService personService;

@Autowired
public PersonController(PersonService personService){
    this.personService = personService
}

@PostMapping
@ResponseBody
public String createPerson(@RequestBody String requestBody){ 
    return personService.createPerson(requestBody);
}   

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Необходимость десериализации зависит от того, какая обработка необходима для вашей оболочки. Если вы просто хотите передать запрос дальше, не меняя его, это должно сработать.

Однако, если вам просто нужно прокси-запрос, рассмотрите возможность использования HTTP-сервлета Smiley Proxy для этой задачи. Или, если вы используете API для реализации безопасности, рассмотрите возможность использования Spring cloud gateway

1 голос
/ 30 марта 2020

Всегда лучше следовать правилам кодирования и преобразовывать тело запроса в java класс POJO вместо строки. Преобразование в POJO имеет несколько преимуществ:

  • Вы можете предоставить дополнительные проверки для тела запроса.
  • Включите изменения в теле запроса или, если есть какие-либо проблемы, их можно было бы легко определить.
  • Обеспечивает лучший контроль над структурой запроса. В будущем, если используемый вами API изменит структуру тела запроса, вы можете изменить его в своем API вместо того, чтобы адаптировать его для каждого API, использующего ваш API.
...