簡體   English   中英

來自 application.properties 的 Mapstruct 值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM