【问题标题】:Mapstruct value from application.properties来自 application.properties 的 Mapstruct 值
【发布时间】:2022-01-04 09:21:17
【问题描述】:

是否可以从 application.properties 文件的字段中设置值?

我正在寻找类似的东西

    @Mapping(target="version", expression="${application.version}")
    StateDto stateToStateDto(State state);

application.version=v1 来自 application.properties 文件。

【问题讨论】:

    标签: java spring properties mapstruct mapper


    【解决方案1】:

    考虑一个“实用服务”,例如:

    @Service
    public class PropertyService {
    
      @org.springframework.beans.factory.annotation.Value("${application.version}")
      private String appVersion;
    
      // accessors, more properties/stuff..
    }
    

    然后你可以定义你的映射:

    @Mapper(// ..., ...
       componentModel = "spring")
    public abstract class StateMapper {
    
      @Autowired
      protected PropertyService myService;
    
      @org.mapstruct.Mapping(target="version", expression="java(myService.getAppVersion())")
      public abstract StateDto stateToStateDto(State state);
      // ...
    }
    

    另见:


    My minimal solution @github

    【讨论】:

    • 很好的解决方案!
    • myService 在我运行代码时似乎是 null
    • 我在我的帖子中修复了一些错误(私有 -> 受保护的抽象方法),并向 github 添加了一个(工作!;)示例! :-)
    【解决方案2】:

    据我所知,这是不可能的。 Mapstruct 在编译时分析@Mapping 注解。并且注释参数需要常量。所以从文件中获取它们是不可能的。

    您始终可以在 MapStruct 中实现满足您需求的东西。但我会使用一个简单的自我实现的映射器,您可以在运行时从环境中获取 version 字段中的值。

    【讨论】:

      【解决方案3】:

      这在 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;
      
      
          // ...
      }
      

      【讨论】:

        猜你喜欢
        • 2021-02-25
        • 1970-01-01
        • 2021-01-28
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 2019-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多