Я экспериментирую с созданием микросервисов с использованием Spring Boot.SpringBoot RestController generic POST type
У меня есть интерфейсный API, который получает запросы POST-запроса ResponseEntity и обрабатывает его (сохранение в базу данных и т. Д.). Где Data является объектом самосоздаваемого класса.
Теперь у меня есть API верхнего уровня (который обрабатывает аутентификацию, ..). Конечные пользователи будут взаимодействовать с внутренними службами через этот API верхнего уровня. Таким образом, этот API в основном просто должен пересылать все запросы в правый back-end api.
В этом верхнем API я не хочу включать все мои классы (например, класс Data в этом случае), и я бы скорее просто послал его как данные String json или что-то в этом роде. Так что я попытался это:
@RequestMapping(method = RequestMethod.POST, value="/data")
ResponseEntity<String> createUnit(@RequestBody String data) {
URI uri = util.getServiceUrl("dataservice");
String url = uri.toString() + "/data";
ResponseEntity<String> result = restTemplate.postForEntity(url, data, String.class);
return new ResponseEntity<String>(result.getBody(), HttpStatus.OK);
}
Но это приводит к org.springframework.web.client.HttpClientErrorException: 415 Unsupported Media Type
.
Итак, мой вопрос в том, есть ли способ перенаправить эти запросы в мой back-end без необходимости включать все мои классы объектов в мой API? Я полагал, что это должно быть возможно, так как это то же самое, что когда веб-браузер отправляет запросы в формате json, не зная, какой именно объект является фактическим.
обработкаБэкэнда выглядит следующим образом:
@RequestMapping(method = RequestMethod.POST, value="/data")
ResponseEntity<Data> saveData(@RequestBody Data data) {
//Some code that processes the data
return new ResponseEntity<Data>(dataProcessed, HttpStatus.OK);
}
Вам не нужно возвращать '' ResponseEntity . Используйте данные напрямую. Это приведет к сериализации данных как Json. При необходимости вы можете использовать конвертер Jackson. Используйте базовый класс в качестве возвращаемого типа, если вам нужен общий тип возврата –
@ViswanathLekshmanan. Основные API также отправляют соответствующие коды «HttpStatus», например. '404', когда объект Data не был найден, или' 204', когда он был успешно удален и т. Д. Логика определения кода HttpStatus связана с этими базовыми API и не должна происходить в верхнем слое. Вот почему я отправляю данные с помощью 'ResponseEntity' – Kaj