繁体   English   中英

如何在mapstruct接口中注入guice依赖 - java

[英]How to inject guice dependency in mapstruct interface - java

我的对象

 Public void Student(){
     private string name;
     private int age;
 }

Public void ClassRoom(){
   private string roomNo;
   private Student student; //Student Object
}

Public void School(){
   private string roomNo;
   private String student; //String student
}

我有一个界面

@Mapper(componentModel = "jsr330", unmappedTargetPolicy = ReportingPolicy.IGNORE, builder = @Builder(disableBuilder = true))
public interface TestjkMapper {

    @Named("convertObjToString")
    static String convertObjToString(Student student) {
        return new Gson.tojson(student)
    }

   @Mapping(source = "student", target = "student",qualifiedByName = "convertObjToString")
   School mapClassRoomToSchool(@NonNull ClassRoom classRoom);

}

我打算注入那个 gson 而不是 new Gson()

按照这个我如何结合Guice和Mapstruct?

我尝试进行更改,但不确定在哪里添加

@Inject
Gson gson

我试过这样

public interface TestjkMapper {

  @Inject
  Gson gson

    @Named("authorityToMap")
    static Map authorityToMap(Authority authority) {
        return gson.tojson(authority.tostring())
    }

}

我收到如下编译器错误

variable gson might not have been initialized

如何在该接口内正确注入

这里也是

bind(TestjkMapper.class).to(TestjkMapperImpl.class)

TestjkMapper - 我的界面

TestjkMapperImpl - 这是在运行时生成的。 所以不知道如何绑定这个

确切的问题:

如何使用 guice 注入的gson将 Student object转换为 Student String

如果要在映射器中使用自定义注入组件,则需要使用抽象类而不是接口。 您不能将字段注入接口。

在您的示例中,它将如下所示:

@Mapper(componentModel = "jsr330", unmappedTargetPolicy = ReportingPolicy.IGNORE, builder = @Builder(disableBuilder = true))
public abstract class TestjkMapper {

    @Inject
    Gson gson;

    @Named("convertObjToString")
    static String convertObjToString(Student student) {
        return gson.tojson(student)
    }

   @Mapping(source = "student", target = "student", qualifiedByName = "convertObjToString")
   School mapClassRoomToSchool(@NonNull ClassRoom classRoom);

}

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM