修改创建分区返回问题
Change-Id: I305e417430c795b602bffd6053e4ed1ec86f3733
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java b/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
index 80617de..fc892f7 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
@@ -1,9 +1,14 @@
package edu.bjtu.groupone.backend.api;
import edu.bjtu.groupone.backend.domain.dto.CategoryDTO;
+import edu.bjtu.groupone.backend.domain.dto.CategoryCreateRequest;
import edu.bjtu.groupone.backend.domain.entity.Category;
import edu.bjtu.groupone.backend.service.CategoryService;
import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
@@ -24,15 +29,34 @@
public ResponseEntity<List<CategoryDTO>> getCategories() {
return ResponseEntity.ok(categoryService.getCategoryTree());
}
- // 创建分区
+
@PostMapping
- @Operation(summary = "创建新分区")
- public ResponseEntity<String> createCategory(@RequestBody Category category) {
- categoryService.addCategory(category);
- return ResponseEntity.ok("分区创建成功");
+ @Operation(
+ summary = "创建新分区",
+ description = "创建一个新的分区,返回创建的分区ID",
+ responses = {
+ @ApiResponse(
+ responseCode = "200",
+ description = "创建成功",
+ content = @Content(schema = @Schema(implementation = Long.class))
+ ),
+ @ApiResponse(responseCode = "400", description = "请求参数错误")
+ }
+ )
+ public ResponseEntity<Long> createCategory(
+ @Parameter(description = "分区信息", required = true)
+ @RequestBody CategoryCreateRequest request
+ ) {
+ Category category = new Category();
+ category.setName(request.getName());
+ if (request.getParentId() != null) {
+ Category parent = new Category();
+ parent.setId(request.getParentId());
+ category.setParent(parent);
+ }
+ return ResponseEntity.ok(categoryService.addCategory(category));
}
- // 删除分区
@DeleteMapping("/{id}")
@Operation(summary = "删除分区")
public ResponseEntity<String> deleteCategory(@PathVariable Long id) {
@@ -40,7 +64,6 @@
return ResponseEntity.ok("分区删除成功");
}
- // 更新分区
@PutMapping("/{id}")
@Operation(summary = "更新分区信息")
public ResponseEntity<String> updateCategory(@PathVariable Long id, @RequestBody Category category) {
@@ -49,7 +72,6 @@
return ResponseEntity.ok("分区更新成功");
}
- // 获取单个分区
@GetMapping("/{id}")
@Operation(summary = "获取分区详情")
public ResponseEntity<Category> getCategory(@PathVariable Long id) {
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
index 28cd43d..b181916 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
@@ -6,7 +6,9 @@
import edu.bjtu.groupone.backend.domain.entity.Work;
import edu.bjtu.groupone.backend.domain.entity.Version;
import edu.bjtu.groupone.backend.domain.entity.Comment;
+import edu.bjtu.groupone.backend.domain.entity.Category;
import edu.bjtu.groupone.backend.service.WorkService;
+import edu.bjtu.groupone.backend.utils.AliOSSUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
@@ -18,7 +20,9 @@
import org.springframework.data.domain.Page;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
import java.util.List;
@RestController
@@ -29,6 +33,9 @@
@Autowired
private WorkService workService;
+ @Autowired
+ private AliOSSUtils aliOSSUtils;
+
@GetMapping
@Operation(summary = "获取作品列表", description = "可按分区分页查询作品")
public ResponseEntity<Page<WorkResponse>> getWorks(
@@ -62,8 +69,26 @@
@PostMapping
@Operation(summary = "创建新作品")
- public ResponseEntity<Integer> createWork(@RequestBody Work work) {
- return ResponseEntity.ok(workService.createWork(work));
+ public ResponseEntity<Integer> createWork(
+ @RequestParam("cover") MultipartFile cover,
+ @RequestParam("title") String title,
+ @RequestParam("author") String author,
+ @RequestParam("categoryId") Long categoryId,
+ @RequestParam("description") String description) {
+ try {
+ String coverUrl = aliOSSUtils.upload(cover);
+ Work work = new Work();
+ work.setTitle(title);
+ work.setAuthor(author);
+ work.setDescription(description);
+ work.setCover(coverUrl);
+ Category category = new Category();
+ category.setId(categoryId);
+ work.setCategory(category);
+ return ResponseEntity.ok(workService.createWork(work));
+ } catch (IOException e) {
+ return ResponseEntity.badRequest().build();
+ }
}
@PutMapping("/{id}")
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryCreateRequest.java b/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryCreateRequest.java
new file mode 100644
index 0000000..ce14551
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryCreateRequest.java
@@ -0,0 +1,15 @@
+package edu.bjtu.groupone.backend.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(description = "创建分区的请求DTO")
+public class CategoryCreateRequest {
+
+ @Schema(description = "分区名称", example = "文学艺术", required = true)
+ private String name;
+
+ @Schema(description = "父分区ID,如果是一级分区则为null", example = "1")
+ private Long parentId;
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
index c6383c0..1d2b089 100644
--- a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
@@ -6,22 +6,29 @@
import lombok.AllArgsConstructor;
import lombok.Builder;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.v3.oas.annotations.media.Schema;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "categories")
@Data
-@NoArgsConstructor // 添加无参构造器注解
+@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Schema(description = "分区实体")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Schema(description = "分区ID", example = "1")
private Long id;
@Column(nullable = false, length = 50)
+ @Schema(description = "分区名称", example = "文学艺术", required = true)
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@@ -29,7 +36,8 @@
name = "parent_id",
foreignKey = @ForeignKey(name = "fk_category_parent")
)
- @JsonIgnoreProperties("children")
+ @JsonIgnoreProperties({"children", "parent"})
+ @Schema(description = "父分区")
private Category parent;
@OneToMany(
@@ -38,6 +46,7 @@
orphanRemoval = true
)
@Builder.Default
+ @JsonIgnore
private List<Category> children = new ArrayList<>();
// 修复后的构造器确保 children 被初始化
@@ -48,6 +57,12 @@
this.children = new ArrayList<>(); // 关键修复:初始化 children
}
+ public Category(String name, Category parent) {
+ this.name = name;
+ this.parent = parent;
+ this.children = new ArrayList<>();
+ }
+
public void addChild(Category child) {
children.add(child);
child.setParent(this);
diff --git a/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java b/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
index 7ee8ebb..d827ed5 100644
--- a/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
+++ b/src/main/java/edu/bjtu/groupone/backend/interceptor/Interceptor.java
@@ -35,7 +35,8 @@
url.startsWith("/swagger-ui/") ||
url.startsWith("/v3/api-docs/") ||
url.startsWith("/favicon.ico") ||
- url.startsWith("/static/")) {
+ url.startsWith("/static/") ||
+ url.startsWith("/api/category")) { // 放行分区相关接口
return true;
}
// 从请求头读取 token
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
index d29b298..4955c49 100644
--- a/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
@@ -12,7 +12,7 @@
List<Category> findByParentId(Long parentId);
List<Category> findAll();
// 新增
- @Insert("INSERT INTO categories(name, parent_id) VALUES(#{name}, #{parent.id})")
+ @Insert("INSERT INTO categories(name, parent_id) VALUES(#{name}, #{parent.id,jdbcType=BIGINT})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insert(Category category);
@@ -21,7 +21,7 @@
void deleteById(Long id);
// 更新
- @Update("UPDATE categories SET name=#{name}, parent_id=#{parent.id} WHERE id=#{id}")
+ @Update("UPDATE categories SET name=#{name}, parent_id=#{parent.id,jdbcType=BIGINT} WHERE id=#{id}")
void update(Category category);
// 查询
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java b/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
index db78bda..b054d05 100644
--- a/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
+++ b/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
@@ -39,8 +39,9 @@
}
}
- public void addCategory(Category category) {
+ public Long addCategory(Category category) {
categoryMybatisMapper.insert(category);
+ return category.getId();
}
public void deleteCategory(Long id) {