[英]Mapstruct value from application.properties
是否可以從application.properties文件中的字段設置值?
我正在尋找類似的東西
@Mapping(target="version", expression="${application.version}")
StateDto stateToStateDto(State state);
其中application.version=v1
來自application.properties文件。
至於我的知識去,這是不可能的。 Mapstruct 在編譯時分析@Mapping
注解。 並且注釋參數需要常量。 所以從文件中獲取它們是不可能的。
您總是可以在MapStruct
中實現滿足您需求的東西。 但是我會使用一個簡單的自實現映射器,您可以在運行時從環境中的version
字段中獲取值。
考慮一個“實用服務”,例如:
@Service
public class ConstantPropertyService {
@Value("${application.version}"
private String appVersion;
// accessors, more properties/stuff..
}
然后你可以定義你的映射,如:
@Mapper(// ..., ...
componentModel = "spring")
public abstract class MyMapper {
@Autowired
private ConstantPropertyService myService;
@Mapping(target="version", expression="java(myService.getAppVersion())")
StateDto stateToStateDto(State state);
// ...
}
也可以看看:
這通過 MapStruct 是不可能的。 但是,可以提出一個特性來支持一些使用 Spring @Value
並注入它的自定義表達式語言。
例如
@Mapping(target="version", expression="springValue(${application.version})")
StateDto stateToStateDto(State state);
然后 MapStruct 將生成如下內容:
@Component
public class StateMapperImpl {
@Value("${application.version}")
private String version;
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.