java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot服务添加字段

一文详解SpringBoot服务中添加字段的完整指南

作者:爱分享的鱼鱼

在日常开发中,我们经常需要为现有的API接口添加新的返回字段,本文将以一个实际案例为例详细介绍如何在Spring Boot项目中为服务接口添加新字段,感兴趣的小伙伴可以了解下

前言

在日常开发中,我们经常需要为现有的API接口添加新的返回字段。这看似简单,但涉及到多个层面的修改,需要遵循一定的规范和流程。本文将以一个实际案例为例,详细介绍如何在Spring Boot项目中为服务接口添加新字段。

案例背景

假设我们需要为/records接口添加checkInNo字段,该字段来自room_checkin表的check_in_no列。

实施步骤

1. 分析现有代码结构

首先需要了解相关的代码层次结构:

2. 修改VO对象

在数据传输对象中添加新字段是最关键的一步。

public class RoomCheckinRecordsVO {
    private List<CostRecordVO> costRecords;
    private List<RoomRecordSimpleVO> roomRecords;
    private BigDecimal costAmount;
    private BigDecimal payAmount;
    private BigDecimal balance;
    // 新增字段
    private String checkInNo;
    
    // getter和setter方法
    public String getCheckInNo() {
        return checkInNo;
    }
    
    public RoomCheckinRecordsVO setCheckInNo(String checkInNo) {
        this.checkInNo = checkInNo;
        return this;
    }
}

3. 修改Service实现层

在服务实现类中查询并设置新字段的值:

@Override
public RoomCheckinRecordsVO records(Integer checkInId) {
    List<CostRecordVO> costRecords = costQuery.queryByCheckInId(checkInId);
    List<RoomRecordSimpleVO> roomRecords = roomRecordQuery.queryByCheckInId(checkInId);

    // 原有的业务逻辑...
    List<CostRecordVO> safeCostRecords = costRecords == null ? Collections.emptyList() : costRecords;
    BigDecimal payAmount = safeCostRecords.stream()
            .filter(Objects::nonNull)
            .filter(v -> CheckinCostRecordConstants.TYPE_INCOME_EXPENSE.equals(v.getType()))
            .map(CostRecordVO::getAmount)
            .filter(Objects::nonNull)
            .reduce(BigDecimal.ZERO, BigDecimal::add);

    BigDecimal costAmount = safeCostRecords.stream()
            .filter(Objects::nonNull)
            .filter(v -> CheckinCostRecordConstants.TYPE_COST.equals(v.getType()))
            .map(CostRecordVO::getAmount)
            .filter(Objects::nonNull)
            .reduce(BigDecimal.ZERO, BigDecimal::add);

    // 查询入住记录获取checkInNo
    RoomCheckinPO checkin = mapper.selectById(checkInId);
    String checkInNo = checkin != null ? checkin.getCheckInNo() : null;

    return new RoomCheckinRecordsVO()
            .setCostRecords(costRecords)
            .setRoomRecords(roomRecords)
            .setCostAmount(costAmount)
            .setPayAmount(payAmount)
            .setBalance(payAmount.subtract(costAmount))
            .setCheckInNo(checkInNo);  // 设置新字段
}

4. 验证修改

确保编译通过且没有语法错误:

mvn compile

或者在IDE中检查是否有编译错误。

最佳实践建议

1. 字段命名规范

2. 空值处理

// 推荐的做法
String checkInNo = checkin != null ? checkin.getCheckInNo() : null;

// 或者使用Optional(Java 8+)
String checkInNo = Optional.ofNullable(checkin)
    .map(RoomCheckinPO::getCheckInNo)
    .orElse(null);

3. 事务处理

如果涉及数据库修改,确保使用适当的事务注解:

@Transactional(rollbackFor = Exception.class)

4. 日志记录

对于重要的业务逻辑变更,添加适当的日志:

logger.info("查询入住记录,checkInId: {}, checkInNo: {}", checkInId, checkInNo);

注意事项

总结

添加字段虽然是常见的开发任务,但仍需谨慎处理。完整的流程包括:

通过遵循上述步骤和建议,可以确保代码修改的安全性和可维护性。

这个案例展示了在企业级Spring Boot项目中进行字段扩展的标准做法,适用于大多数类似的开发场景。

到此这篇关于一文详解SpringBoot服务中添加字段的完整指南的文章就介绍到这了,更多相关SpringBoot服务添加字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文