Я работаю над 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' должен отражать завышенную длину данных?
Что такое бесы?
Спасибо