繁体   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