首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在另一个字段中复制代码

在另一个字段中复制代码
EN

Stack Overflow用户
提问于 2022-09-29 20:20:54
回答 1查看 98关注 0票数 0

我只想将generateToken方法应用于令牌字段,但是mapstruct也在强制登录,如何解决这个问题?

代码语言:javascript
复制
@Mapper(uses = MapperGenerateToken.class)
public interface TelemarketerAccountMapper {
TelemarketerAccountMapper INSTANCE = Mappers.getMapper( TelemarketerAccountMapper.class );

@Mapping(expression = "java(MapperGenerateToken.generateToken(assistant.getLogin()))", target = "token")
@Mapping(source = "assistant.login", target = "login")
AuthenticatedTelemarketerAccount map(TelemarketerAccount assistant);

基因编码:

代码语言:javascript
复制
    @Override
public AuthenticatedTelemarketerAccount map(TelemarketerAccount assistant) {
    if ( assistant == null ) {
        return null;
    }

    AuthenticatedTelemarketerAccount authenticatedTelemarketerAccount = new AuthenticatedTelemarketerAccount();

    authenticatedTelemarketerAccount.setLogin( MapperGenerateToken.generateToken( assistant.getLogin() ) );

    authenticatedTelemarketerAccount.setToken( MapperGenerateToken.generateToken(assistant.getLogin()) );

    return authenticatedTelemarketerAccount;
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-30 06:28:07

MapStruct具有重用通过Mapper#uses定义的其他映射中定义的用户定义映射的概念。

有两种方法可以解决这个问题:

限定符的使用

MapperGenerateToken#generateToken方法中,您可以使用MapStruct @Named注释,并在映射中使用它。

例如:

代码语言:javascript
复制
public class MapperGenerateToken {

    @Named("generateToken")
    public static String generateToken(String login) {
        // your custom logic
    }
}
代码语言:javascript
复制
@Mapper(uses = MapperGenerateToken.class)
public interface TelemarketerAccountMapper {
    TelemarketerAccountMapper INSTANCE = Mappers.getMapper( TelemarketerAccountMapper.class );

    @Mapping(target = "token", source = "login", qualifiedByName = "generateToken")
    AuthenticatedTelemarketerAccount map(TelemarketerAccount assistant);
}

这将生成您期望的代码。

注意:不需要第二个@Mapping,因为MapStruct会自动检测登录的映射。

Mapper#imports的使用

如果仍然希望使用表达式,则可以使用Mapper#imports告诉MapStruct只导入该类,而不使用它查找映射方法。

例如:

代码语言:javascript
复制
@Mapper(uses = MapperGenerateToken.class)
public interface TelemarketerAccountMapper {
    TelemarketerAccountMapper INSTANCE = Mappers.getMapper( TelemarketerAccountMapper.class );

    @Mapping(target = "token", expression = "java(MapperGenerateToken.generateToken(assistant.getLogin()))")
    AuthenticatedTelemarketerAccount map(TelemarketerAccount assistant);
}

我强烈建议使用第一种使用限定符的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73901213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档