当前位置: 首页 > 知识库问答 >
问题:

Mapstruct@Mapper的uses属性不起作用

陶文林
2023-03-14

我的一个Mapstruct映射器没有使用另一个映射器与@mapper(uses=

我们的验证支持需要映射器将实体映射到DTO。一个ValidationSupportNeedEntity包含一个ActivityEntity属性,我正在尝试从该属性映射到一个ActivityDTO。

因此,问题在于嵌套对象,即ActivityEntityActive

以下是源代码:

从ValidationSupport NeedMapper.java:

@Mapper(uses = {LifecycleErrorMessagesMapper.class, ActivityMapper.class})
public interface ValidationSupportNeedMapper {

   ValidationSupportNeed toValidationSupportNeed(ValidationSupportNeedEntity source);

...

来自ActivityMapper.java:

@Component
public class ActivityMapper {

    public Activity toActivity(ActivityEntity activity) {
       //Implementation
    }

    public ActivityEntity toActivityEntity(Activity activity) {
        //Implementation
    }

}

来自ValidationSupportNeedEntity.java(实体)

public class ValidationSupportNeedEntity {

    private ActivityEntity activityEntity;

来自ValidationSupporteed.java(DTO)

public class ValidationSupportNeed implements AutoValidated {
      private Activity validationActivity;

但是,Mapstruct似乎忽略了@Mapper注释上使用=属性,并继续生成自己的映射方法,如下所示:

   @Override
    public ValidationSupportNeed toValidationSupportNeed(ValidationSupportNeedEntity source) {
        if ( source == null ) {
            return null;
        }

        ValidationSupportNeed validationSupportNeed = new ValidationSupportNeed();

        validationSupportNeed.setValidationActivity( validationSupportNeedEntityToActivity( source ) );
    ...
  }

    protected Activity validationSupportNeedEntityToActivity(ValidationSupportNeedEntity validationSupportNeedEntity) {
        if ( validationSupportNeedEntity == null ) {
            return null;
        }

        Activity activity = new Activity();

        activity.setCode( validationSupportNeedEntity.getValidationActivityCode() );

        return activity;
    }

我错过了什么?有人能帮忙吗?

编辑:ActivityMapper未自动连接到ValidationSupportNeedMapper实现中。

共有1个答案

朱炳
2023-03-14

添加映射注释解决了以下问题:

@Mapping(source = "activityEntity", target = "validationActivity")
ValidationSupportNeed toValidationSupportNeed(ValidationSupportNeedEntity source);

请注意,属性的名称是不同的。

 类似资料:
  • 我在一个android应用程序中工作,正在使用一个DialogFragment来显示一个对话框,我想让那个DialogFragment不可取消。我已经将对话框可取消属性设置为false,但它仍然不受影响。 请查看我的代码,并建议我一个解决方案。

  • 我从以下来源下载了应用程序https://github.com/springframeworkguru/spring5-mvc-rest/tree/vendor-api,但Mapstruct遇到了问题。 我认为在Intellij注释中@mapper不为mapper创建bean。我没有改变John GitHub的代码。你知道吗?我试图将生成的路径源更改为目标,但这没有帮助,谢谢你的帮助。

  • 问题内容: 自最新版本以来,我经历了Chrome的某些意外行为:在Firefox中,此代码可以正常运行: 它在Chrome中不起作用(只需下载一个名为“下载”的文件),但是以前效果很好。我必须更改一下它又能正常工作吗? 问题答案: 经过研究,我终于找到了您的问题。 下载属性: 如果存在HTTP标头Content-Disposition:,并且提供的文件名与此属性不同,则HTTP标头的优先级高于此属

  • 我尝试将ini文件解析为可以在ant脚本中使用的属性。我有以下几点: 我试图做的是解析所有的name=value对,并将它们放入属性中,如:section。名称=值; 不知何故,“echoMsg”目标中没有记住该部分。我想记住部门名称。 所以 应该成为: 这是我的ant脚本的输出: 如您所见,未设置最后一个“${prevSection}”。我希望它是“全球性的”。 我试着用它来代替财产,但没有区别

  • 我有一个ASP. NET核心Web API。 一个endpoint,它接受一个名为搜索的模型。它有一个名为表达式类型查询的属性。这个表达式对象有子类。 我将以下JSON发布到我的endpoint(应用程序的内容类型/JSON) {"查询":{"字段ID":"主体","值":"蛋糕","运算符":"匹配"}} 首先,查询参数只是基本表达式——一个多态性问题! 所以我以为是定制的模型活页夹。 我可以针

  • 问题内容: 我需要在CSS中使用属性选择器来更改不同颜色和图像上的链接,但是它不起作用。 我有这个HTML: 而这个CSS: 为什么背景不是红色的? 问题答案: 在href后面使用$。这将使属性值匹配字符串的结尾。