Como injetar dependência guice na interface mapstruct - java
Meus objetos
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
}
Eu tenho uma interface
@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);
}
Estou planejando injetar esse gson em vez do novo Gson ()
De acordo com isso, como posso combinar Guice e Mapstruct?
Tentei fazer alterações, mas não tenho certeza de onde adicionar
@Inject
Gson gson
Eu tentei assim
public interface TestjkMapper {
@Inject
Gson gson
@Named("authorityToMap")
static Map authorityToMap(Authority authority) {
return gson.tojson(authority.tostring())
}
}
Estou recebendo um erro do compilador conforme abaixo
variable gson might not have been initialized
como injetar corretamente dentro dessa interface
Aqui também
bind(TestjkMapper.class).to(TestjkMapperImpl.class)
TestjkMapper - Minha interface
TestjkMapperImpl - gerado no tempo de execução. Então, não tenho certeza de como vincular isso
Pergunta exata:
Como converter aluno objectem aluno Stringusando guice injetadogson
Respostas
Se você deseja usar componentes injetados personalizados em seus mapeadores, você precisará usar classes abstratas em vez de interfaces. Você não pode injetar campos em interfaces.
No seu exemplo, será semelhante a:
@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);
}