Spring Boot JPA宿舍管理系统获取Hostel数据报错求助
Spring Boot + JPA 宿舍管理系统Jackson序列化错误问题
我使用Spring Boot结合JPA仓库开发宿舍管理系统,已添加一个宿舍,随后添加房间并更新宿舍以维护关联表条目。现在尝试获取Hostel数据时失败,抛出如下Jackson序列化错误:
错误栈追踪
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:774) ~[jackson-databind-2.13.4.2.jar:2.13.4.2] lots of line.............
核心代码与请求示例
实体类代码
Hostel.java
@Table(name = "hostels") public class Hostel implements Cloneable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) int hostelId; String hostelName; String hostelAddress; String contactPersonName; String contactPersonNumber; @OneToMany @JoinTable(joinColumns = @JoinColumn( name = "hostel_id", referencedColumnName = "hostelId" ), inverseJoinColumns = @JoinColumn( name = "room_number", referencedColumnName = "roomNumber" )) List<Room> rooms; @OneToOne Mess mess; @OneToMany List<Notice> notices; }
Room.java
@Table(name = "rooms") public class Room { @Id int roomNumber; int noOfOccupants; @OneToOne RoomDetail roomDetail; @OneToOne Hostel hostel; @OneToMany List<Student> student; }
RoomDetail.java
@Entity public class RoomDetail { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) int roomDetailId; String roomName; int price; int maxOccupants; }
请求JSON示例
Hostel JSON
{ "hostelId": 1, "hostelName": "Hostel no. 1 Boys Hostel", "hostelAddress": "building no. 5", "contactPersonName": "XYZ", "contactPersonNumber": "9999977777", "rooms": null, "mess": null, "notices": null }
Room JSON
{ "noOfOccupants" : 0, "roomDetail" : { "roomDetailId" : 1 } , "hostel" : { "hostelId" : 1 } }
服务层代码
AdminService.java
@Service public class AdminService { @Autowired HostelDAO hostelDAO; @Autowired RoomDAO roomDAO; @Autowired RoomDetailDAO roomDetailDAO; public Hostel addHostel(Hostel hostel) { return hostelDAO.save(hostel); } public Room addRoom(Room room,int qty,int firstRoomNumber){ Optional<Hostel> hostel = hostelDAO.findById(room.getHostel().getHostelId()); Optional<RoomDetail> roomDetail = roomDetailDAO.findById(room.getRoomDetail().getRoomDetailId()); room.setHostel(hostel.get()); room.setRoomDetail(roomDetail.get()); List<Room> rooms = new ArrayList<>(); room.setRoomNumber(firstRoomNumber); System.out.println(room); firstRoomNumber--; int i = 1; while( i <= qty) { Room newRoom = new Room(room.getRoomNumber(), room.getNoOfOccupants(),room.getRoomDetail(), room.getHostel(),room.getStudent()); newRoom.setRoomNumber(firstRoomNumber + i); rooms.add(newRoom); i++; } roomDAO.saveAll(rooms); hostel.get().setRooms(rooms); hostelDAO.save(hostel.get()); return null; } public List<Hostel> getHostelData() { return hostelDAO.findAll(); } }
内容的提问来源于stack exchange,提问作者Aniket
相关产品推荐
相关产品推荐

