В настоящее время я работаю над REST API, в котором я создал REST Client, как в https://quarkus.io/guides/rest-client.
Это мой клиентский интерфейс:
@Path("/measurements")
@RegisterRestClient
public interface MeasurementService {
@POST
@Path("/{deviceId}/{datapoint}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<DataSet<Float>> getHistory(@PathParam("deviceId") String deviceId, @PathParam("datapoint") String datapoint, MeasurementHistoryRequest body);
}
Я проверил это, и он отлично работает, и я получаю ожидаемый результат с "200 - ОК". Но я хочу использовать обобщенный c DataSet <> и позволить вызывающей стороне определить точный тип возврата. Я пробовал это:
@Path("/measurements")
@RegisterRestClient
public interface MeasurementService {
@POST
@Path("/{deviceId}/{datapoint}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public <T> List<DataSet<T>> getHistory(@PathParam("deviceId") String deviceId, @PathParam("datapoint") String datapoint, MeasurementHistoryRequest body, Class<T> type);
}
T необходим, потому что ответ может содержать целочисленные, плавающие, логические или строковые значения. Другой API отвечает «400 - Bad Request». Поэтому я думаю, что Quarkus интерпретирует дополнительный параметр типа как другую полезную нагрузку.
Есть ли способ заставить клиента работать с типом возвращаемого значения c? Или я должен реализовать свой собственный клиент для этого?
РЕДАКТИРОВАТЬ:
Я получил фактическую полезную нагрузку, которую клиент создает и отправляет из wireshark: "java.lang.Float"
(с двумя " )
Конечно, полезная нагрузка должна быть объектом MeasurementHistoryRequest (что работает, когда нет обобщений).
Ответ, который я получаю:
{
"statusCode": 400,
"error": "Bad Request",
"message": "Unexpected token \" in JSON at position 0"
}