Spring Boot 接口開發提示詞(Controller / Service / Repository 分層、參數校驗、全局異常處理、統一返回)
用 Spring Boot 寫增刪改查接口和業務接口時用:描述實體和業務規則,得到分層清晰的代碼,包括請求與響應對象、Bean Validation 參數校驗、事務邊界、全局異常處理、統一錯誤返回和分層測試,避免把實體直接暴露給前端。
通用大模型 對話模型通用
你是一名有多年 Spring Boot 項目經驗的 Java 後端工程師。請根據需求生成接口代碼。 - Spring Boot 與 Java 版本:[版本](例:Spring Boot 3.3 + Java 21) - 持久層:[持久層](例:Spring Data JPA、MyBatis-Plus) - 業務需求:[業務需求](例:優惠券的創建、領取、查詢) - 業務規則:[業務規則](例:每人限領 1 張,庫存為 0 不可領) - 項目已有約定:[項目約定](例:統一返回結構、包結構) 生成要求: 1. 分層職責:Controller 只做參數接收、校驗和結果轉換;Service 負責業務規則與事務;Repository 或 Mapper 只做數據訪問。不要在 Controller 中寫業務邏輯。 2. 對象劃分:請求對象、響應對象與數據庫實體分開;轉換方式(手寫或使用映射工具)與項目保持一致;響應中不包含敏感字段。 3. 參數校驗:使用 Bean Validation 註解;分組校驗或嵌套對象校驗的寫法;校驗失敗返回字段級錯誤訊息。 4. 事務:事務註解加在 Service 的公開方法上;說明同類方法內部調用時事務不生效的問題;只讀查詢標記為只讀事務。 5. 並發:「每人限領 1 張、庫存扣減」這類規則要在數據庫層面保證(唯一約束、條件更新),不能只靠先查詢再判斷。 6. 異常處理:自定義業務異常,用全局異常處理器統一轉換為錯誤返回;區分業務錯誤(4xx)和系統錯誤(5xx);系統錯誤不向客戶端返回堆棧。 7. 測試:Service 層單元測試(模擬倉儲);Controller 層使用切片測試驗證參數校驗和錯誤返回;關鍵的並發規則寫一個集成測試。 輸出:包結構、各層代碼(中文註釋)、統一返回與全局異常處理代碼、測試代碼。註明 Spring Boot 3 與 2 的差異(例如 Jakarta 包名)。
高亮處換成你自己的內容:[版本]、[持久層]、[業務需求]、[業務規則]、[項目約定]
ChatGPT Plus 充值
已被複製 0 次
使用說明
怎麼填變量:[版本] 必須寫,Spring Boot 3 起校驗與持久化相關的包名從 javax 改為 jakarta,照搬 2.x 的代碼會編譯失敗。[項目約定] 有統一返回結構或包結構約定的,一定貼進來,生成的代碼才能直接放進項目。
常見坑:
- 在同一個 Service 類中,一個方法調用另一個帶事務註解的方法,事務不會生效,因為調用沒有經過代理。
- 「每人限領 1 張」用先查詢、再插入實現,並發時同一個人可以領到兩張。在數據庫加唯一約束兜底。
- 直接把 JPA 實體作為接口返回值,懶加載字段可能觸發額外查詢甚至序列化報錯,還容易泄露內部字段。
追問技巧:追問「為這些接口補充 OpenAPI 文檔註解」,或「把領取接口改成高並發版本,說明在庫存扣減上用數據庫條件更新與 Redis 預扣兩種方案的取捨」。
示例輸出
示例,僅供參考(Service 層節選)
java
@Service
@RequiredArgsConstructor
public class CouponService {
private final CouponRepository couponRepo;
private final CouponClaimRepository claimRepo;
@Transactional
public ClaimResult claim(long couponId, long userId) {
// 條件更新扣減庫存:庫存為 0 時影響行數為 0,避免超領
int updated = couponRepo.decreaseStock(couponId);
if (updated == 0) {
throw new BizException(ErrorCode.COUPON_OUT_OF_STOCK, "優惠券已領完");
}
try {
// coupon_claim 表上有 (coupon_id, user_id) 唯一約束,保證每人限領 1 張
claimRepo.saveAndFlush(new CouponClaim(couponId, userId));
} catch (DataIntegrityViolationException e) {
throw new BizException(ErrorCode.COUPON_ALREADY_CLAIMED, "每人限領 1 張");
}
return new ClaimResult(couponId);
}
}
java
@Modifying
@Query("UPDATE Coupon c SET c.stock = c.stock - 1 WHERE c.id = :id AND c.stock > 0")
int decreaseStock(@Param("id") long id);
拋出業務異常會讓事務回滾,已扣減的庫存隨之恢復。
同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~