0

So I have this error:

ERROR [dispatcherServlet]:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion ......

The board is the parent and the visitors is the child, the board id is the foreign key for the visitors.

This is my code :

The Model of the Visitors :

package com.hella.eTop5.eTopLogic.entity;


import net.minidev.json.annotate.JsonIgnore;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.*;
import javax.transaction.Transactional;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
import java.util.Objects;

@Entity
@Table(name = "visitors")
@Transactional
@EnableTransactionManagement
public class Visitors {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "id")
    private Long id;

//    @Column
//    private int boardId;

    @Column
    private Date date;

    @Column
    private String visitors;

    // test

    @ManyToOne
    @JoinColumn(name = "board_id")
    private Board boardId;

    // test

    public Visitors() {
    }

    public Visitors( Board boardId, Date date, String visitors) {
        this.boardId = boardId;
        this.date = date;
        this.visitors = visitors;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Board getBoardId() {
        return boardId;
    }

    public void setBoardId(Board boardId) {
        this.boardId = boardId;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getVisitors() {
        return visitors;
    }

    public void setVisitors(String visitors) {
        this.visitors = visitors;
    }

    @Override
    public String toString() {
        return "Visitors{" +
                "id=" + id +
                ", boardId=" + boardId +
                ", date=" + date +
                ", visitors='" + visitors + '\'' +
                '}';
    }


//    @Override
//    public boolean equals(Object o) {
//        if (this == o) return true;
//        if (o == null || getClass() != o.getClass()) return false;
//
//        Visitors visitors = (Visitors) o;
//
//        return Objects.equals(id, visitors.id);
//    }
//
//    @Override
//    public int hashCode() {
//        return id != null ? id.hashCode() : 0;
//    }


}


This is my Repo :

package com.hella.eTop5.eTopLogic.repository;

import com.hella.eTop5.eTopLogic.entity.Top3;
import com.hella.eTop5.eTopLogic.entity.Visitors;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

public interface VisitorsRepository extends JpaRepository<Visitors, Long>{

}


This is my Service :

package com.hella.eTop5.eTopLogic.service;

import com.hella.eTop5.eTopLogic.entity.Top3;
import com.hella.eTop5.eTopLogic.entity.Visitors;

import java.util.List;

public interface VisitorsService {
    List<Visitors> getAllVisitors();

}

This is my Service Impl :

package com.hella.eTop5.eTopLogic.service.implementation;

import com.hella.eTop5.eTopLogic.entity.Top3;
import com.hella.eTop5.eTopLogic.entity.Visitors;
import com.hella.eTop5.eTopLogic.repository.VisitorsRepository;
import com.hella.eTop5.eTopLogic.service.VisitorsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class VisitorsServiceImpl implements VisitorsService {


    private final VisitorsRepository visitorsRepository;

    @Autowired
    public VisitorsServiceImpl(VisitorsRepository visitorsRepository) {
        this.visitorsRepository = visitorsRepository;
    }



    @Override
    public List<Visitors> getAllVisitors() {
        return visitorsRepository.findAll();
    }
}

This is my controller :

package com.hella.eTop5.eTopLogic.controller;


import com.hella.eTop5.eTopLogic.entity.Visitors;
import com.hella.eTop5.eTopLogic.repository.VisitorsRepository;
import com.hella.eTop5.eTopLogic.service.VisitorsService;
import com.hella.eTop5.eTopLogic.service.implementation.VisitorsServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.transaction.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@Configuration
@Controller
@RequestMapping("/visitors")
public class VisitorsController {
    private final VisitorsService visitorsService;
    private final VisitorsRepository visitorsRepository;

    @Autowired
    public VisitorsController(VisitorsService visitorsService, VisitorsRepository visitorsRepository) {
        this.visitorsService = visitorsService;
        this.visitorsRepository = visitorsRepository;
    }


    @GetMapping("/getVisitors")
    public ResponseEntity<List<Visitors>> getVisitors(){
        var allVisitors = visitorsService.getAllVisitors();
        return new ResponseEntity(allVisitors, HttpStatus.OK);

    }

}

And this is my board model :

( between test ========== and end ======= is my code snipper ) ;

package com.hella.eTop5.eTopLogic.entity;

import com.hella.eTop5.userManagement.entity.User;
import net.minidev.json.annotate.JsonIgnore;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.*;
import javax.transaction.Transactional;
import javax.validation.constraints.NotNull;
import java.util.*;

@Entity
@Transactional
@EnableTransactionManagement
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "id", nullable = false)
    private Long id;

    @NotNull
    @Column(name = "name")
    private String name;

    @Column(name = "membersOnly")
    private boolean membersOnly = false;

    @Column(name = "notificationActive")
    private boolean notificationActive = false;

    @Column(name = "enabled", columnDefinition = "boolean default true")
    private boolean enabled = false;


    @ManyToOne
    @JoinColumn(name = "plant_id", nullable = true)
    private Plant plantBoard;

    @ManyToOne
    @JoinColumn(name = "uap_id", nullable = true)
    private UAP uapBoard;

    @ManyToOne
    @JoinColumn(name = "gap_id", nullable = true)
    private GAP gapBoard;

    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "board_users", joinColumns = @JoinColumn(name = "board_id"), inverseJoinColumns = @JoinColumn(name = "user_id"))
    private Set<User> userBoardList = new LinkedHashSet<>();

    @ManyToMany(mappedBy = "adminBoards")
    private Set<User> adminUserBoardList = new LinkedHashSet<>();

    @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true)
    private Set<ListOfTasks> listOfTasks = new LinkedHashSet<>();

    @OneToMany(mappedBy = "boardEntity", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Presentation> presentationList = new LinkedList<>();

    // test =========================================================

    @OneToMany(mappedBy = "boardId", cascade = CascadeType.ALL, orphanRemoval = true)
    @JsonIgnore
    private List<Visitors> visitors = new LinkedList<>();

    // end ===============================================================


    @Column(name = "meeting_duration")
    private Integer meetingDuration;

    @Column(name = "start_time")
    private String startTime;



    public Board() {
    }

    public Board(String name) {
        this.name = name;
    }

    public Board(Long id, String name, GAP gapBoard) {
        this.id = id;
        this.name = name;
        this.gapBoard = gapBoard;
    }

    public void addListOfTasks(ListOfTasks listOfTasks) {
        this.listOfTasks.add(listOfTasks);
        listOfTasks.setBoard(this);
    }

    public void removeListOfTasks(ListOfTasks listOfTasks) {
        this.listOfTasks.remove(listOfTasks);
        listOfTasks.setBoard(null);
    }

    public void addUser(User user) {
        this.userBoardList.add(user);
        user.addBoard(this);
    }

    public void removeUser(User user) {
        this.userBoardList.remove(user);
        user.removeBoard(this);
    }

    public void addAdminUser(User user) {
        this.adminUserBoardList.add(user);
        user.addAdminBoard(this);
    }

    public void removeAdminUser(User user) {
        this.adminUserBoardList.remove(user);
        user.removeAdminBoard(this);
    }

    public void addPresentation(Presentation presentation) {
        this.presentationList.add(presentation);
        presentation.setBoardEntity(this);
    }

    public void removePresentation(Presentation presentation) {
        this.presentationList.remove(presentation);
        presentation.setBoardEntity(this);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public String getNameToLowerCase() {
        return name.toLowerCase();
    }

    public void setName(String name) {
        this.name = name;
    }


    public Plant getPlantBoard() {
        return plantBoard;
    }

    public void setPlantBoard(Plant plant) {
        this.plantBoard = plant;
    }

    public UAP getUapBoard() {
        return uapBoard;
    }

    public void setUapBoard(UAP uap) {
        this.uapBoard = uap;
    }

    public GAP getGapBoard() {
        return gapBoard;
    }

    public void setGapBoard(GAP gap) {
        this.gapBoard = gap;
    }

    public boolean getMembersOnly() {
        return membersOnly;
    }

    public void setMembersOnly(boolean membersOnly) {
        this.membersOnly = membersOnly;
    }

    public boolean getNotificationActive() {
        return notificationActive;
    }

    public void setNotificationActive(boolean notificationActive) {
        this.notificationActive = notificationActive;
    }

    public boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public Set<User> getUserBoardList() {
        return userBoardList;
    }

    public void setUserBoardList(Set<User> userBoardList) {
        this.userBoardList.clear();
        this.userBoardList.addAll(userBoardList);
    }

    public Set<User> getAdminUserBoardList() {
        return adminUserBoardList;
    }

    public void setAdminUserBoardList(Set<User> adminUserBoardList) {
        this.adminUserBoardList.clear();
        this.adminUserBoardList.addAll(adminUserBoardList);
    }

    public Set<ListOfTasks> getListOfTasks() {
        return listOfTasks;
    }

    public void setListOfTasks(Set<ListOfTasks> listOfTasks) {
        this.listOfTasks.clear();
        this.listOfTasks.addAll(listOfTasks);
    }


    public Integer getMeetingDuration() {
        return meetingDuration;
    }

    public void setMeetingDuration(Integer meetingDuration) {
        this.meetingDuration = meetingDuration;
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Board board = (Board) o;

        return Objects.equals(id, board.id);
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }

    @Override
    public String toString() {
        return "Board{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", isMembersOnly=" + membersOnly +
                ", notificationActive=" + notificationActive +
                ", isActive=" + enabled +
                ", gapBoard=" + gapBoard +
                ", userBoardList=" + userBoardList +
                '}';
    }
}


UpAndAdam
  • 4,515
  • 3
  • 28
  • 46
Mevricks
  • 33
  • 6

0 Answers0