Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError)] with root cause, может кто сталкивался, пытаюсь отоброзить объект класса Listener с полем @OneToMany(cascade = CascadeType.ALL)
private Set<Channel> channels;. У класса Channel соотвественно @JoinColumn(name="listeners", nullable=false)
private Listener listener; Проблема в отображении объектов с вложенными данными. Контроллер выглядит так
@GetMapping("/all")
public ResponseEntity<?> getAllListeners() {
try {
return ResponseEntity.ok(listenerService.getAll());
} catch (Exception e) {
return ResponseEntity.badRequest().body("No registered listeners!");
}
}
А зачем использовать entity для веб-слоя? Это даже концептуально не самая лучшая идея
@GetMapping("/all") public List<Listener> getAllListeners() { try { return listenerService.getAll(); } catch (Exception e) { return null; } } Та же самая ошибка к соожалению, полсе того как добавляют channel к listener: listenerService.findById(id) .map(listener -> { Channel channel = Channel.fromDTO(channelDTO); channel.setListener(listener); listener.getChannels().add(channel); listenerService.updateListener(listener); return null; });
А кто твою конвенцию REST покусал?
Попробуй @JsonIgnore в классе Channel над Listener повесить
Отлично! Спасибо большое
Либо можешь создать ResponseEntity и маппером возвращать не сущность
https://youtu.be/ByKMurRytjU?si=S4t36WA1yf9V-Y9m
Для этого есть JsonBackReference и JsonManagedReference
Обсуждают сегодня