首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現 RESTful API 為移動端提供服務:Spring MVC + Jackson 完整實戰

     編輯:Java 相關知識

移動優先時代,Java 後端通過 RESTful API 為 App/Web 提供統一數據服務。本文講解 REST 核心原則、Spring MVC 註解式開發、JSON 序列化、統一響應封裝、異常處理、安全與最佳實踐,附完整登錄接口示例代碼。

RESTful 核心原則速覽

原則說明示例
資源導向URL 標識資源,非動作GET /users/123 而非 /getUserById
HTTP 動詞GET/POST/PUT/DELETE 對應 CURDPOST /users 創建
無狀態服務端不保存客戶端上下文每請求攜帶 Token/JWT
統一響應固定結構:code、message、data{"code":200,"data":{...}}
版本控制URL 或 Header 管理版本/api/v1/users

Spring MVC 核心註解

  • @RestController = @Controller + @ResponseBody,直接返回對象自動轉 JSON。
  • @RequestMapping / @GetMapping / @PostMapping 映射路徑與方法。
  • @PathVariable 綁定 URL 佔位符 {id}。
  • @RequestBody 綁定請求體 JSON 反序列化為對象。
  • @RequestParam 綁定查詢參數 ?name=xxx。

統一響應封裝

@Data @AllArgsConstructor @NoArgsConstructor
public class Result<T> {
    private int code;       // 200 成功,其他業務錯誤碼
    private String message; // 提示信息
    private T data;         // 業務數據

    public static <T> Result<T> ok(T data) {
        return new Result<>(200, "成功", data);
    }
    public static <T> Result<T> fail(int code, String msg) {
        return new Result<>(code, msg, null);
    }
}

完整登錄接口實現

實體類

@Data
public class LoginDTO {
    private Integer username; // 學號/工號
    private String password;
}

Service 接口與實現

public interface UserService {
    boolean login(Integer username, String password);
}

@Service
public class UserServiceImpl implements UserService {
    @Autowired private UserDao userDao; // Hibernate/JPA/MyBatis

    @Override
    public boolean login(Integer username, String password) {
        User user = userDao.findByUsername(username);
        return user != null && passwordEncoder.matches(password, user.getPassword());
    }
}

Controller

iOS 客戶端調用示例 (Objective-C)

NSString *urlStr = [NSString stringWithFormat:@"%@/api/v1/auth/login", BASE_URL];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
req.HTTPMethod = @"POST";
req.setValue(@"application/json", forHTTPHeaderField:@"Content-Type");

NSDictionary *body = @{@"username": @12345, @"password": @"123456"};
req.HTTPBody = [NSJSONSerialization dataWithJSONObject:body options:0 error:nil];

NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:req
    completionHandler:^(NSData *data, NSURLResponse *resp, NSError *err) {
    if (err) { NSLog(@"網絡錯誤: %@", err); return; }
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSNumber *code = json[@"code"];
    if ([code intValue] == 200) {
        NSLog(@"登錄成功");
    } else {
        NSLog(@"登錄失敗: %@", json[@"message"]);
    }
}];
[task resume];

進階必備模塊

  1. 全局異常處理:@ControllerAdvice + @ExceptionHandler 統一捕獲異常返回 Result。
  2. 參數校驗:@Valid + JSR-303 註解 (@NotNull、@Size) + BindingResult。
  3. JWT 認證授權:登錄簽發 Token,攔截器驗證並解析用戶身份。
  4. API 文檔:集成 Knife4j/Swagger 3 自動生成在線文檔。
  5. 限流熔斷:Sentinel/Resilience4j 保護核心接口。
  6. 日誌追蹤:MDC 注入 TraceId,ELK 收集分析。

常見坑與避坑指南

問題原因解決
返回 406 Not Acceptable缺少 Jackson 依賴或未啟用 @EnableWebMvc引入 spring-boot-starter-web (含 Jackson)
日期字段序列化為時間戳Jackson 默認格式配置 spring.jackson.serialization.write-dates-as-timestamps=false + @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
循環引用導致 StackOverflow雙向關聯實體@JsonIgnore / @JsonManagedReference + @JsonBackReference / DTO 打破循環
大文件上傳 OOM默認內存緩衝配置 spring.servlet.multipart.max-file-size + 流式處理

總結

RESTful 不是新技術,而是架構風格約定。Spring MVC + Jackson 讓 Java 實現 REST API 變得極簡:定義 DTO → 寫 Service → Controller 註解映射 → 統一響應封裝。生產級項目再疊加「安全、文檔、觀測、治理」四大支柱,即可構建穩健、可演進的移動端後端服務。建議下一步:實戰項目中引入 Spring Boot 3 + Spring Doc + JWT 完整落地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved