You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:20:18