Я использую JHipster 3.5.0 с spring -boot и angular для создания приложения. Я хотел бы отправлять обновления из бэкэнда в пользовательский интерфейс, используя события, отправленные сервером, но я не могу заставить его работать.
Вот код моего RestController:
@RestController
@RequestMapping("/api")
public class SSEResource {
private final List<SseEmitter> sseEmitters = new CopyOnWriteArrayList<>();
@RequestMapping(value = "/sse", method = RequestMethod.GET)
@Timed
public SseEmitter getSSE() throws IOException {
SseEmitter sseEmitter = new SseEmitter();
this.sseEmitters.add(sseEmitter);
sseEmitter.send("Connected");
return sseEmitter;
}
@Scheduled(fixedDelay = 3000L)
public void update() {
this.sseEmitters.forEach(emitter -> {
try {
emitter.send(String.valueOf(System.currentTimeMillis()));
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
Мой контроллер Angaluar выглядит так:
(function () {
'use strict';
angular
.module('myApp')
.controller('SSEController', SSEController);
SSEController.$inject = [];
function SSEController() {
var vm = this;
vm.msg = {};
function handleCallback(msg) {
vm.msg = msg.data;
}
vm.source = new EventSource('api/sse');
vm.source.addEventListener('message', handleCallback, false);
}
})
();
Когда я пытаюсь использовать этот код, я получаю
406 Not Acceptable HTTP status (Недопустимый статус HTTP)
из-за заголовка запроса Accept: "text / event-stream". Если я вручную изменю этот заголовок на Accept: " / *" и воспроизведу этот запрос с помощью инструментов отладки своего браузера, я получу
401 Неавторизованный статус HTTP
Я думаю, что мне не хватает чего-то довольно простого, но я уже проверил свои SecurityConfiguration и authInterceptor, не понимая, чего не хватает.
Кто-нибудь может объяснить, что я делаю не так?