Rest api возвращает объект ответа, но тип данных ответа меняется - PullRequest
0 голосов
/ 26 мая 2020
public class PlayerRow extends PlayerApiResponseRow {

private String txt;
private Bigdecimal amount;
private Long players;

}

Выше - объект, отправляемый в responseEntity

@Data
@NoArgsConstructor
public class PlayerApiResponseRow {

}

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonPropertyOrder({ "status", "response" })
public class BetApiResponse {

    private ResponseStatus status;
    private BetApiResponseResponse response;

}



public class BetApiResponseResponse {

    @JsonProperty(value = "num_rows")
    private long numRows;
    private List<String> columns;
    private List<PlayerApiResponseRow> rows;

}

И заглушка, как показано ниже,

public class playerStub{

public ResponseEntity<BetApiResponse> data(@RequestHeader(value = "REPORTS") String reports,
                                                   @ApiParam(value = "Format: YYYY-MM-DD, 1111-mm-dd to activate sleep")
                                                   @RequestParam(value = "start")  String start,
                                                   @RequestParam(value = "end")  String end) {

    // some code goes here

    ArrayList<PlayerApiResponseRow> rows = new ArrayList<>();

    rows.add(new PlayerRow(dateStr, BigDecimal.valueOf(656752), 2147480L);
    rows.add(new PlayerRow(dateStr2, BigDecimal.valueOf(12232), 21480L);

    // Some code

    BetApiResponseResponse response = new BetApiResponseResponse(rows.size(), columns, rows);

    BetApiResponse betApiResponse = new BetApiResponse(status, response);

    return new ResponseEntity<>(playerApiResponseRow, HttpStatus.OK);
    }
}

в rows есть 2 объекта PlayerRow с поля Bigdecimal и Long и объект ответа BetApiResponseResponse имеет список PlayerApiResponseRow.

Когда я вызываю эту заглушку локально с заданными значениями в строках, т.е. BigDecimal.valueOf(656752), 2147480L, BigDecimal.valueOf(12232), 21480L эти числа теряют свой тип данных до целого числа.

И если указать значение как BigDecimal.valueOf(656752.89), 21474802444445345L, BigDecimal.valueOf(12232.67), 214805645645L, т.е. с десятичной точкой и большим числом, чем целочисленный диапазон с L, тогда оно передается как double и long.

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

ResponseEntity<JsonNode> response = methodcall(url, startDate, endDate, callForStubService);

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

Я использую spring boot 2.1 и jakson2.9, java 11

Извините за длинное описание

...