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