diff --git a/src/main/java/com/example/myproject/controller/PostController.java b/src/main/java/com/example/myproject/controller/PostController.java
index 63fcbe8..4233028 100644
--- a/src/main/java/com/example/myproject/controller/PostController.java
+++ b/src/main/java/com/example/myproject/controller/PostController.java
@@ -90,5 +90,11 @@
         return "Post uncollected successfully!";
     }
 
+    // 获取用户收藏的所有帖子
+    @GetMapping("/{userId}/getAllcollections")
+    public List<Map<String, Object>> getAllCollections(@PathVariable("userId") Long userId) {
+        return postService.getAllCollections(userId);
+    }
+
 
 }
diff --git a/src/main/java/com/example/myproject/repository/CollectionsRepository.java b/src/main/java/com/example/myproject/repository/CollectionsRepository.java
index 4b192bd..300f233 100644
--- a/src/main/java/com/example/myproject/repository/CollectionsRepository.java
+++ b/src/main/java/com/example/myproject/repository/CollectionsRepository.java
@@ -7,10 +7,13 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface CollectionsRepository extends JpaRepository<Collections, Long> {
     @Modifying
     @Transactional
     @Query("DELETE FROM Collections l WHERE l.userId = :userId AND l.postNo = :postNo")
     void deleteLikeByUserIdAndPostNo(Long userId, Long postNo);
+    List<Collections> findByUserId(Long userId);
 }
diff --git a/src/main/java/com/example/myproject/service/PostService.java b/src/main/java/com/example/myproject/service/PostService.java
index feb7404..90fc706 100644
--- a/src/main/java/com/example/myproject/service/PostService.java
+++ b/src/main/java/com/example/myproject/service/PostService.java
@@ -228,5 +228,44 @@
     }
 
 
+    // 获取用户收藏的所有帖子
+    public List<Map<String, Object>> getAllCollections(Long userId) {
+        // 获取用户收藏的帖子ID
+        List<Collections> collections = collectionsRepository.findByUserId(userId);
+
+        // 如果没有收藏的帖子，返回空列表
+        if (collections.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        List<Map<String, Object>> response = new ArrayList<>();
+        for (Collections collection : collections) {
+            // 根据 postNo 查询帖子
+            Optional<Post> postOptional = postRepository.findById(collection.getPostNo());
+            if (postOptional.isPresent()) {
+                Post post = postOptional.get();
+
+                // 获取帖子作者的信息
+                Optional<Users> userOptional = userRepository.findById(post.getUser_id());
+                if (userOptional.isPresent()) {
+                    Users user = userOptional.get();
+
+                    // 将帖子数据和用户信息封装到 Map 中
+                    Map<String, Object> postInfo = new LinkedHashMap<>();
+                    postInfo.put("postNo", post.getPostNo());
+                    postInfo.put("title", post.getTitle());
+                    postInfo.put("postContent", post.getPostContent());
+                    postInfo.put("imageUrl", post.getImageUrl());
+                    postInfo.put("userId", post.getUser_id());
+                    postInfo.put("username", user.getUsername());  // 帖子作者用户名
+                    postInfo.put("avatarUrl", user.getAvatarUrl());  // 帖子作者头像
+
+                    response.add(postInfo);
+                }
+            }
+        }
+        return response;
+    }
+
 
 }
