mapstruct 默认值
时间: 2025-05-10 19:37:18 浏览: 33
### MapStruct 中默认值的使用方法
在 MapStruct 中,默认值可以通过 `defaultValue` 属性来设置。当源对象中的字段为空或者不存在时,目标对象会自动填充指定的默认值[^2]。
以下是具体的实现方式:
#### 设置默认值的方式
通过在 `@Mapping` 注解中使用 `defaultValue` 参数,可以为特定的目标字段提供一个默认值。如果源字段未被初始化或其值为 null,则会应用该默认值。
```java
@Mapper
public interface CarMapper {
@Mapping(target = "year", source = "manufactureYear")
@Mapping(target = "color", defaultValue = "Unknown") // 如果源对象没有 color 字段,则目标对象的 color 值会被设为 "Unknown"
CarDto carToCarDto(Car car);
}
```
在此示例中,如果源对象 `Car` 不包含 `color` 字段或其值为 null,则目标对象 `CarDto` 的 `color` 将被赋值为 `"Unknown"`。
---
#### 使用表达式动态生成默认值
除了静态字符串外,还可以利用 `expression` 属性动态计算默认值。这种方式允许更复杂的逻辑处理。
```java
@Mapper
public interface UserMapper {
@Mapping(target = "fullName", expression = "java(source.getFirstName() != null && !source.getFirstName().isEmpty() ? source.getFirstName() : \"Default Name\")")
UserDto userToUserDto(User source);
}
```
在这个例子中,如果 `firstName` 是空的,则返回 `"Default Name"` 作为默认值。
---
#### 在 Bean 映射中配置默认值
对于复杂的数据结构(如嵌套对象),可以在 `@BeanMapping` 注解中统一配置默认行为。例如,忽略某些字段或将它们设置为固定值。
```java
@Mapper
public interface OrderMapper {
@BeanMapping(ignoreByDefault = true) // 忽略所有未显式映射的字段
@Mapping(target = "orderDate", defaultValue = "2023-01-01")
TargetOrder orderToTargetOrder(SourceOrder source);
}
```
上述代码片段展示了如何在一个更大的上下文中应用默认值策略。
---
### 总结
MapStruct 提供了多种机制用于定义默认值,包括但不限于 `defaultValue` 和 `expression` 属性。这些功能使得开发者能够更加灵活地控制数据转换过程中的异常情况处理[^3]。
阅读全文
相关推荐


















