Java / Spring Boot 后端开发技能。当涉及 Java 后端开发、Spring Boot 项目搭建、API 开发、数据库设计、Maven/Gradle 构建时激活。
# 使用 Spring Initializr CLI(如果可用)
curl https://start.spring.io/starter.zip \
-d dependencies=web,data-jpa,mysql,validation,lombok,devtools \
-d type=maven-project \
-d language=java \
-d javaVersion=17 \
-d groupId=com.example \
-d artifactId=项目名 \
-o project.zip && unzip project.zip
或手动创建 pom.xml 基础依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
</parent>
<dependencies>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>
@Data @AllArgsConstructor @NoArgsConstructor
public class R<T> {
private int code;
private String message;
private T data;
public static <T> R<T> ok(T data) { return new R<>(200, "ok", data); }
public static <T> R<T> fail(String msg) { return new R<>(500, msg, null); }
}
@RestController
@RequestMapping("/api/模块")
@RequiredArgsConstructor
public class XxxController {
private final XxxService xxxService;
@GetMapping
public R<List<XxxVO>> list() { return R.ok(xxxService.list()); }
@GetMapping("/{id}")
public R<XxxVO> getById(@PathVariable Long id) { return R.ok(xxxService.getById(id)); }
@PostMapping
public R<XxxVO> create(@Valid @RequestBody XxxDTO dto) { return R.ok(xxxService.create(dto)); }
@PutMapping("/{id}")
public R<XxxVO> update(@PathVariable Long id, @Valid @RequestBody XxxDTO dto) { return R.ok(xxxService.update(id, dto)); }
@DeleteMapping("/{id}")
public R<Void> delete(@PathVariable Long id) { xxxService.delete(id); return R.ok(null); }
}
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
public R<?> handleBusiness(BusinessException e) { return R.fail(e.getMessage()); }
@ExceptionHandler(MethodArgumentNotValidException.class)
public R<?> handleValidation(MethodArgumentNotValidException e) {
String msg = e.getBindingResult().getFieldErrors().stream()
.map(f -> f.getField() + ": " + f.getDefaultMessage())
.collect(Collectors.joining(", "));
return R.fail(msg);
}
}