Cursor Rules怎么配置Java项目规范?
在Ja va项目里,想让Cursor生成的代码自动遵守团队约定,比如统一用Result包装返回值、Controller必须加@RestController、Service层禁止直接操作数据库,关键一步是配置Rules——不是靠口头提醒AI,而是把规范写进项目根目录的规则文件里。

创建.cursor/rules目录并启用新规则体系
先删掉旧的.cursorrules单文件,新建.cursor/rules文件夹。Cursor 2026年已默认优先读取这个目录下的.mdc文件,旧文件会被忽略。
这一步不能跳过:旧规则体系不支持按语言、模块或环境分层激活,所有规则硬塞进一个文件,AI每次都要加载全部内容,容易稀释关键约束。
在项目根目录执行:
mkdir -p .cursor/rules
配置Spring Boot全局强制规范(Always类型)
这类规则适用于整个项目,无论打开哪个Ja va文件都生效,比如禁用System.out.println、强制返回Result封装、统一异常处理方式。
在.cursor/rules下新建001-springboot-always.mdc文件,内容如下:
```md
Rule Type: Always
### 全局禁止
- 禁止使用System.out.println、e.printStackTrace()、printStackTrace()
- 禁止在Controller层捕获业务异常,必须向上抛出由@GlobalExceptionHandler统一处理
- 禁止直接new对象,必须通过Spring容器注入或工厂方法获取
### 全局必须
- 所有HTTP接口返回值必须封装为com.example.project.common.Result
- 所有Controller类必须使用@RestController注解,禁止使用@Controller
- 所有Service接口必须定义在service包下,实现类必须放在service.impl包下
```
文件名必须以数字开头并按序号排列
按文件路径自动触发Ja va编码规范(Auto Attached类型)
只在打开.ja va文件时才加载,避免污染前端或配置文件的生成上下文。
新建002-ja va-coding.mdc,写入:
Rule Type: Auto Attached
File Pattern: **/*.ja va
### 命名与结构
- 类名用PascalCase(UserService),方法/变量用camelCase(getUserById)
- 常量全大写下划线(MAX_RETRY_TIMES)
- 包名全小写点分隔(com.example.project.service)
- 不允许接口加I前缀(用UserService,不用IUserService)
### 代码风格
- 使用4空格缩进,禁止Tab
- 左大括号不换行,右大括号独占一行
- 每行≤120字符
- import按字母序排列,禁用*通配符
### 注释要求
- 类和公共方法必须有Ja vaDoc,含@author @date @param @return @throws
- 复杂业务逻辑块必须有中文注释说明意图,禁止无意义注释如“// 获取用户”
为Mapper层单独配置MyBatis规范
方法一:路径匹配精准触发
新建003-mybatis-mapper.mdc,设置File Pattern为**/mapper/**/*.ja va,内容聚焦SQL层约束:
Rule Type: Auto Attached
File Pattern: **/mapper/**/*.ja va
### 必须遵守
- Mapper接口方法名必须与XML中id一致
- 所有查询方法必须返回List
- 更新方法必须返回int,表示影响行数
- XML中SQL禁止拼接字符串,必须用#{},禁用${}
- 所有Mapper接口必须继承org.apache.ibatis.annotations.Mapper
方法二:用Agent Requested类型动态激活
新建004-mybatis-smart.mdc,Rule Type设为Agent Requested,description写:“当AI识别到当前文件涉及数据库操作或MyBatis相关关键词时自动加载本规则”。
这样一来,AI在生成带@Select注解的方法时,会主动引入这条规则;写工具类时,则不会受到干扰。
验证规则是否生效
第一步:重启Cursor,确保它重新扫描.cursor/rules目录
第二步:打开任意.ja va文件,输入/让AI写一个UserController,观察返回值是否自动套Result、是否用了@RestController、是否调用了UserService而非直接查库
第三步:在mapper目录下新建UserMapper.ja va,让AI生成findByEmail方法,检查是否返回User对象、是否用了#{}、是否加了@Mapper注解
如果AI仍生成System.out.println或@Controller,请检查001-springboot-always.mdc是否放在.cursor/rules根下、文件名是否带数字前缀、内容是否用```md包裹。