Есть ли способ вернуть Flux <String>из конечной точки REST пружины в веб-браузер / приложение переднего плана (т. Е. Angular 6)? - PullRequest
1 голос
/ 14 мая 2019

Я хочу вернуть Flux в браузер, но когда я достигаю конечной точки, это выдает мне сообщение «406 not accept».

Это для сервера Apache Tomcat, работающего с Spring-boot 5, JAVA 8. В STS (Spring Tool Suite) IDE.

@RestController
public class CloudFoundry {
    @GetMapping(value = "/LogApplication", produces =
            MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> logApplication() throws Throwable {
        return Flux.just("a", "b", "c", "d");

    }
}

когда я достигаю конечной точки на локальном хосте, он должен выдавать мне поток строк, но вместо этого он выдает ошибку «406 не приемлемо».

1 Ответ

1 голос
/ 14 мая 2019

MediaType.TEXT_EVENT_STREAM_VALUE используется для Server-Sent-Events, которые необходимо использовать соответствующим образом.

Это то, что вам нужно иметь на внешней стороне:

// Declare an EventSource
const eventSource = new EventSource('http://server.url/LogApplication');
// Handler for events without an event type specified
eventSource.onmessage = (e) => {
  // Do something - event data etc will be in e.data
};
// Handler for events of type 'eventType' only eventSource.addEventListener('eventType', (e) => {
  // Do something - event data will be in e.data,
  // message will be of type 'eventType'
});

YouХорошее объяснение событий, отправленных сервером, можно найти в следующем сообщении в блоге: Взгляд на события, отправленные сервером

...