简体   繁体   English

从 MapStruct 映射器访问 Spring Boot 应用程序中的应用程序属性

[英]Accessing application property in Spring boot application from MapStruct mapper

I want to access basic-info.expiration from application.yml a Spring boot application.我想从 Spring Boot 应用程序的application.yml访问basic-info.expiration

application.yml应用程序.yml

basic-info:
  expiration: 6

UserMapper.java用户映射器.java

@Mapper(componentModel = "spring")
public interface UserMapper {

  @Value("${basic-info.expiration}")
  static long expireInMonths = 0;
  // ^^^^^^^^^^^^^^^^^^^^^^^^^^^

  @Mapping(target = "requireBasicInfoUpdate", source = "user", qualifiedByName = "isBasicInfoUpdateRequired")
  UserDto toUserDto(User user);

  @Named("isBasicInfoUpdateRequired")
  default Boolean isBasicInfoUpdateRequired(User user) {
    final var expireDate = LocalDate.now().minusMonths(expireInMonths);
    final var lastUpdatedOn = user.getBasicInfoUpdatedDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

    return expireDate.isAfter(lastUpdatedOn);
  }
}

How to inject property value with MapStruct如何使用 MapStruct 注入属性值

As @M.作为@M。 Deinum suggested, interface was changed to an abstract class. Deinum 建议,将接口更改为抽象类。 This is the most preferred method since application need no refactoring.这是最优选的方法,因为应用程序不需要重构。

@Mapper(componentModel = "spring")
public abstract class UserMapper {
  @Value("${basic-info.expiration}")
  long expireInMonths = 0;

  @Mapping(target = "requireBasicInfoUpdate", source = "user", qualifiedByName = "isBasicInfoUpdateRequired")
  public abstract UserDto toUserDto(User user);

  @Named("isBasicInfoUpdateRequired")
  public Boolean isBasicInfoUpdateRequired(User user) {
    final var expireDate = LocalDate.now().minusMonths(expireInMonths);
    final var lastUpdatedOn = user.getBasicInfoUpdatedDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

    return expireDate.isAfter(lastUpdatedOn);
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spring boot mapstruct mapper using other mapper - Spring boot mapstruct mapper using other mapper MapStruct 实现在 Spring Boot Web 应用程序中不起作用 - MapStruct implementation is not working in Spring Boot Web Application 使用 Gradle 和 Mapstruct 和 Lombok 和 Spring 引导时出现问题(映射器没有实现) - Problem using Gradle and Mapstruct and Lombok and Spring Boot (No implementation for mapper) 无法将MapStruct映射器注入spring-boot JUnit测试 - Cannot inject MapStruct mapper into spring-boot JUnit test Spring 启动看不到我的 Mapstruct 映射器 - Spring Boot Can't See My Mapstruct Mapper MyBatis映射器类未在Spring Boot应用程序中使用两个数据源注册 - MyBatis mapper class not registered in Spring Boot application with two datasources 用于访问LinkedIn数据的Spring启动应用程序 - Spring boot application for accessing LinkedIn data 在应用程序上下文中从.properties文件访问地图属性(春季) - accessing map property from .properties file in application context (Spring) Spring Boot 2.1:未从 application-test.yml 加载属性 - Spring Boot 2.1 : Not loading property from application-test.yml 从卡在 block() 中的 MapStruct Mapper 访问 Reactive CRUD 存储库 - Accessing Reactive CRUD repository from MapStruct Mapper stuck in block()
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM