Quarkus: клиент Rest с универсальным типом возврата c - PullRequest
0 голосов
/ 21 января 2020

В настоящее время я работаю над 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"
}
...