【Spring Content】Spring Content 入门

49 阅读1分钟

概览

Spring Content 是 Spring 生态系统中用于处理内容管理的框架

Github地址:github.com/paulcwarren…

官方例子:github.com/paulcwarren…

快速开始

定义实体

@Entity
public class Document {
    @Id
    @GeneratedValue
    private Long id;
    
    private String name;
    
    @ContentId
    private String contentId;
    
    @ContentLength
    private Long contentLength;
    
    @MimeType
    private String mimeType;
    
    // getters and setters
}

创建 ContentStore 接口

@StoreRestResource(path = "documents")
public interface DocumentContentStore extends ContentStore<Document, String> {
    // 可以添加自定义方法
}

服务中使用

@Service
public class DocumentService {
    
    @Autowired
    private DocumentRepository documentRepository;
    
    @Autowired
    private DocumentContentStore contentStore;
    
    public Document saveDocument(String name, InputStream content) {
        Document document = new Document();
        document.setName(name);
        
        // 保存实体
        document = documentRepository.save(document);
        
        // 设置内容
        document = contentStore.setContent(document, content);
        
        return documentRepository.save(document);
    }
    
    public InputStream getDocumentContent(Long id) {
        Document document = documentRepository.findById(id)
            .orElseThrow(() -> new RuntimeException("Document not found"));
        
        return contentStore.getContent(document);
    }
}

相关的配置

FS文件系统存储配置

可配置文件存储的路径

@Configuration
@EnableFilesystemStores
public class FilesystemConfig {
    
    @Bean
    public FilesystemStoreConfigurer configurer() {
        return new FilesystemStoreConfigurer() {
            @Override
            public void configure(FilesystemStoreConfigurer configurer) {
                configurer.filesystemRoot("/path/to/storage");
            }
        };
    }
}

S3 存储配置

@Configuration
@EnableS3Stores
public class S3Config {
    
    @Bean
    public AmazonS3 amazonS3() {
        return AmazonS3ClientBuilder.standard()
            .withRegion(Regions.US_EAST_1)
            .build();
    }
}

注解说明

  • @ContentId: 标识内容ID字段
  • @ContentLength: 标识内容长度字段
  • @MimeType: 标识MIME类型字段
  • @OriginalFileName: 标识原始文件名字段

高级特性

内容事件处理

@Component
public class ContentEventHandler {
    
    @HandleBeforeSetContent
    public void beforeSetContent(Document document) {
        // 内容设置前的处理
        System.out.println("Setting content for: " + document.getName());
    }
    
    @HandleAfterSetContent
    public void afterSetContent(Document document) {
        // 内容设置后的处理
        System.out.println("Content set for: " + document.getName());
    }
}

内容转换

@Component
public class ContentConverter {
    
    @StoreEventHandler
    public void convert(BeforeSetContentEvent event) {
        if (event.getSource() instanceof Document) {
            // 执行内容转换逻辑
        }
    }
}