Come iniettare la dipendenza guice nell'interfaccia mapstruct - java
I miei oggetti
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
}
Ho un'interfaccia
@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);
}
Ho intenzione di iniettare quel Gson invece del nuovo Gson ()
In base a questo come posso combinare Guice e Mapstruct?
Ho provato ad apportare modifiche ma non so dove aggiungerlo
@Inject
Gson gson
Ho provato in questo modo
public interface TestjkMapper {
@Inject
Gson gson
@Named("authorityToMap")
static Map authorityToMap(Authority authority) {
return gson.tojson(authority.tostring())
}
}
Ricevo un errore del compilatore come di seguito
variable gson might not have been initialized
come iniettare correttamente all'interno di quell'interfaccia
Anche qui
bind(TestjkMapper.class).to(TestjkMapperImpl.class)
TestjkMapper - La mia interfaccia
TestjkMapperImpl: viene generato in fase di esecuzione. Quindi non sono sicuro di come associarlo
Domanda esatta:
Come convertire uno studente objectin uno studente Stringusando guice iniettatogson
Risposte
Se desideri utilizzare componenti iniettati personalizzati nei tuoi mappatori, dovrai utilizzare classi astratte anziché interfacce. Non puoi iniettare campi nelle interfacce.
Nel tuo esempio sarà simile 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);
}