spring-mvc: вернуть ResponseEntity <byte []> с типом содержимого как json - PullRequest
0 голосов
/ 20 июня 2019

Я работаю над API отдыха Spring-MVC, и один наш сервис должен позволять клиентам устройств загружать некоторые данные: json или дефлированный json, по требованию.

Но данные, предоставляемые нашим сервисом, поступают из стороннего компонента, такого как байтовый массив, и мы ничего о нем не знаем (ожидаем, если этот байтовый массив представляет собой json или дефлированный json, никаких знаний о модели данных )

Более понятно с небольшим количеством кода:

@GetMapping(value = "/data/{dataType}")
public ResponseEntity<byte[]> test(
    @PathVariable String dataType,
    @RequestHeader("Accept-Encoding") String acceptEncoding){

    // get data from third-party
    byte[] blob = thirdPartyComponent.getData(dataType);
    boolean isBlobDeflated = thirdPartyComponent.isDataDeflated(dataType);


    // compress/uncompress on demand
    byte[] data;
    String contentEncoding = "deflate".equals(acceptEncoding) ? "deflate" : "identity";
    if ("deflate".equals(contentEncoding)){
        // get compressed data
        if (isBlobDeflated){
            data = blob;
        } else {
            data = deflate(blob);
        }
    } else {
        // get uncompress data
        if (isBlobDeflated){
            data = inflate(blob);
        } else {
            data = blob;
        }
    }

    // set response header
    HttpHeaders header = new HttpHeaders();
    header.set("Content-Type"   , "application/json");
    header.set("Content-Encoding", contentEncoding);
    header.setContentLength(data.length); // must be data or inflated data length ?

    // find a way to tell spring-MVC to perform no conversion nor compression,
    // and return the data as it

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

Но я не уверен, что этот пример кода будет работать. Я предполагаю, что некоторая конфигурация, чтобы попросить Spring-MVC не выполнять преобразование или сжатие, отсутствует. Я прав ? И заголовок 'content-length' должен отражать завышенную длину данных?

Что такое бесы? Спасибо

...