Я внедряю сервис, который предоставляет конечную точку POST. Эта служба запрашивает базу данных Sql (MongoDB, но я думаю, что она не имеет значения) и должна возвращать список java объектов универсального c класса. Теперь моя цель состоит в том, чтобы передать этому сервису только 2 параметра: строку запроса и объект Class для создания обобщенного c синтаксического анализатора. Мой вопрос: как мне передать объект Class внутри полезной нагрузки Json HTTP-вызова Post? Я не уверен, что это возможно, он думает, что единственный способ сделать это - через байт [] или что-то в этом роде. Но как я мог тогда перестроить в RestController объект Class?
Редактировать
Пример кода на стороне клиента:
public static List<CustomObject> getData(String token, String query) {
try {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new HttpErrorHandler());
//BUILD HEADERS
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.add("Authorization", token);
//BUILD BODY
JsonObject body_obj = new JsonObject();
body_obj.addProperty("query", query);
body_obj.addProperty("class", CustomObject.class);
HttpEntity<String> entity = new HttpEntity<>(body_obj.toString(), headers);
ParameterizedTypeReference<List<CustomObject>> responsetype = new ParameterizedTypeReference<List<CustomObject>>() {
};
ResponseEntity<List<CustomObject>> s = restTemplate.exchange(endpoint+"/getData", HttpMethod.POST, entity, responsetype);
return s.getBody();
} catch (Exception e) {
log.error("returning empty Map, see error handler logs for error info..");
return new ArrayLsit<CustomObject();
}
}
Выполняется публикация, форсирующая List как тип возвращаемого значения.
На стороне сервера ..
@PostMapping("/getData")
public ResponseEntity<List<? extends Serializable> getCognitiveData(String body, HttpServletRequest req) {
log.info("Start /getData");
String token = parseToken(req);
List<? extends Serializable> ret = processBody(body);
log.info("/getData - got "+ret.size()+" elements");
return ResponseEntity.status(HttpStatus.OK).body(ret);
}
В методе parseBody я хотел бы создать класс generi c? расширяет сериализуемость, используя поля, которые содержатся в объекте Class. Дело в том, как передать объект Class в теле Json.
Редактировать 2 Есть ли способ достичь этого без отображения объектов, которые я возвращаю на стороне сервера?