Skip to content

Conversation

@CodeCasterX
Copy link
Member

Summary

实现 HTTP 客户端的 multipart/form-data 请求序列化功能,支持文件上传和表单数据提交。

Changes

核心功能

  • ✅ 在 Entity 接口中添加 resolvedParameters() 方法,允许实体提供 Content-Type 额外参数
  • ✅ 实现 MultiPartEntitySerializer.serializeEntity() 方法,支持 multipart 格式序列化
  • DefaultPartitionedEntity 自动生成 boundary(格式:FitFormBoundary-{uuid}
  • AbstractHttpMessage 自动合并实体参数到 Content-Type header

技术细节

  1. Entity.resolvedParameters(): 新增接口方法,默认返回空 Map,由子类覆盖
  2. Boundary 生成: 使用 UuidUtils.randomUuidString() 生成唯一标识
  3. 序列化逻辑:
    • 支持文本字段(TextEntity)
    • 支持文件上传(FileEntity)
    • 正确处理 Content-Disposition 和 Content-Type headers
  4. 向后兼容: 保持原有反序列化逻辑不变

示例用法

// 创建 multipart 实体
List<NamedEntity> parts = new ArrayList<>();

// 添加文本字段
TextEntity textEntity = new DefaultTextEntity(httpMessage, "value");
parts.add(new DefaultNamedEntity(httpMessage, "field-name", textEntity));

// 添加文件
FileEntity fileEntity = FileEntity.createInline(httpMessage, "file.pdf", 
    new FileInputStream(file), file.length());
parts.add(new DefaultNamedEntity(httpMessage, "file-field", fileEntity));

// 创建并发送
PartitionedEntity entity = new DefaultPartitionedEntity(httpMessage, parts);
request.entity(entity);  // 自动设置 Content-Type: multipart/form-data; boundary=FitFormBoundary-xxx
HttpClassicClientResponse response = request.exchange();

Test Results

  • ✅ 所有 237 个测试通过
  • ✅ 新增 5 个序列化测试用例:
    • 空实体序列化
    • 文本字段序列化
    • 文件字段序列化
    • 混合字段序列化
    • 错误处理(缺少 Content-Type)

Breaking Changes

无破坏性变更。新增的 Entity.resolvedParameters() 方法在 AbstractEntity 中提供了默认实现。

Related Issue

Fixes #315

🤖 Generated with Claude Code

…315)

## Summary
- Implement multipart/form-data request serialization for HTTP client
- Support both text fields and file uploads in multipart requests
- Auto-generate boundary with format: FitFormBoundary-{uuid}
- Maintain backward compatibility with existing deserialization

## Changes
1. Add Entity.resolvedParameters() method for Content-Type parameters
2. Implement MultiPartEntitySerializer.serializeEntity() method
3. Auto-generate and inject boundary parameter in DefaultPartitionedEntity
4. Merge entity parameters with base parameters in AbstractHttpMessage
5. Add comprehensive test cases for multipart serialization

## Test Results
- All 237 tests passed
- New tests cover: empty entities, text fields, file fields, mixed fields

Fixes #315

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@CodeCasterX CodeCasterX requested review from a team and Msquittto and removed request for a team October 4, 2025 14:52
@CodeCasterX CodeCasterX self-assigned this Oct 4, 2025
@CodeCasterX CodeCasterX added type: enhancement A general enhancement in: fit Issues in FIT modules labels Oct 4, 2025
@CodeCasterX CodeCasterX added this to the 3.5.4 milestone Oct 4, 2025
@CodeCasterX CodeCasterX changed the base branch from main to 3.5.x October 4, 2025 15:28
@CodeCasterX CodeCasterX merged commit f07c6e0 into 3.5.x Oct 4, 2025
6 of 7 checks passed
@CodeCasterX CodeCasterX deleted the fit-enhancement-http-multipart branch October 4, 2025 15:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

in: fit Issues in FIT modules type: enhancement A general enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HTTP客户端支持发送multipart/*格式请求

1 participant