У меня есть случай, когда я отправляю огромный json с сервера на клиент с помощью веб-сокетов. Мне нужно сжать json и отправить его клиенту, чтобы браузер мог его раздувать до json. Я могу сжать json в Java, но не могу накачать его до json в браузере. Я получаю ответ ниже в пользовательском интерфейсе. ответ сервера
Я не могу раздуть ответ. Я использовал pako, Zlib и другие библиотеки, но ничего не помогло.
Ниже приведен мой код сжатия Java:
@Override
public void sendMessage(String destination, Object data) {
log.debug("Sending message to topic {}. Message to be sent: {}", destination, data);
messagingTemplate.convertAndSend(destination, data,
new MessagePostProcessor() {
ZipInputStream z = null;
public Message postProcessMessage(Message message) {
final Object payload = message.getPayload();
ByteArrayOutputStream out = new ByteArrayOutputStream(1024);
byte[] bytesToCompress = null;
if (payload instanceof byte[]) {
bytesToCompress = (byte[]) payload;
MessageBuilder<?> builder = MessageBuilder.withPayload(getZippedBytes(bytesToCompress));
StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SEND);
headers.setDestination(destination);
MessageHeaders msgHeaders = new MessageHeaders(headers.toMap());
if (msgHeaders != null) {
builder.copyHeaders(msgHeaders);
}
MimeType mimeType = new MimeType("application", "zip", StandardCharsets.UTF_8);
if (mimeType != null) {
builder.setHeaderIfAbsent("contentType", mimeType);
}
return builder.build();
}
return message;
}
});
}
public static byte[] getZippedBytes(byte[] contents) {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
GZIPOutputStream zip = new GZIPOutputStream(baos);
zip.write(contents);
zip.close();
return baos.toByteArray();
} catch(IOException e) {
throw new IllegalStateException("error occurred while compressing raw message", e);
}
}
Я пытаюсь получить json обратно в клиентская сторона, использующая библиотеку Zlib, но не может ничего получить. Может кто-нибудь, пожалуйста, помогите.
function subscribeToTopic() {
//subscribe to the topic
stompClient.subscribe(url, (data) => {
zlib.gunzip(data.body, function(err, buffer) {
if (!err) {
alert(buffer.toString());
}});
}, { id: subscriptionId });
}