에러
EventSource's response has a Content-Type specifying an unsupported type;
이라는 에러가 발생했습니다. 프론트로부터 위와 같은 에러를 전달 받았습니다.
이벤트 데이터를 저장할 때 원본 객체를 문자열로 변환하지 않고 그대로 저장할 경우 EventSteam 연결이 즉시 종료되는 현상이 확인되었습니다. 그래서 여기저기 물어보고 구글링 해서 json 객체를 문자열로 변환하는 방법을 찾았습니다.
json 마샬링 언마샬링 하기에 대해서 아래글을 참조하세요.
객체직렬화 하기
@Async // 비동기 처리를 위한 어노테이션
@Transactional
public void send(Member receiver, Member sender, NotificationType notificationType, String content, RedirectionType type, Long typeId, Long postId) {
Notification notification = notificationRepository.save(new Notification(receiver, notificationType, content, type, typeId, postId, sender));
String memberId = String.valueOf(receiver.getId());
Map<String, SseEmitter> sseEmitters = emitterRepository.findAllEmitterStartWithByMemberId(memberId);
sseEmitters.forEach(
(key, emitter) -> {
emitterRepository.saveEventCache(key, notification);
Gson gson = new Gson();
String data = gson.toJson(notification);
sendToClient(emitter, key, data);
}
);
}
Gson을 사용해서 객체직렬화를 하였습니다.
Gson gson = new Gson();
String data = gson.toJson(notification);
아직 프론트랑 연결은 안해봤는데 일단 string 형태로 보내니까 json 형태라는 에러는 안뜰거라고 예상합니다.
참고 자료
'TIL' 카테고리의 다른 글
TIL 왜 또 안되니 SSE 230130 (0) | 2023.01.31 |
---|---|
TIL WIL 최종프로젝트도 어느새 막바지 230129 (0) | 2023.01.29 |
TIL @EventListener 알림 기능 강한 결합 제거 230127 (0) | 2023.01.28 |
TIL @Async 비동기 동기 230126 (0) | 2023.01.27 |
TIL SSE 에러 트러블슈팅 230125 (0) | 2023.01.26 |