[英]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
。
basic-info:
expiration: 6
@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.