Comment injecter une dépendance guice dans l'interface mapstruct - Java
Mes objets
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
}
J'ai une 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);
}
Je prévois d'injecter ce gson au lieu du nouveau Gson ()
En conséquence, comment puis-je combiner Guice et Mapstruct?
J'ai essayé d'apporter des modifications mais je ne sais pas où ajouter cela
@Inject
Gson gson
J'ai essayé comme ça
public interface TestjkMapper {
@Inject
Gson gson
@Named("authorityToMap")
static Map authorityToMap(Authority authority) {
return gson.tojson(authority.tostring())
}
}
Je reçois une erreur du compilateur comme ci-dessous
variable gson might not have been initialized
comment injecter correctement dans cette interface
Ici aussi
bind(TestjkMapper.class).to(TestjkMapperImpl.class)
TestjkMapper - Mon interface
TestjkMapperImpl - Ceci est généré au moment de l'exécution. Alors je ne sais pas comment lier ça
Question exacte:
Comment convertir un étudiant objecten étudiant en Stringutilisant guice injectégson
Réponses
Si vous souhaitez utiliser des composants injectés personnalisés dans vos mappeurs, vous devrez utiliser des classes abstraites au lieu d'interfaces. Vous ne pouvez pas injecter de champs dans les interfaces.
Dans votre exemple, cela ressemblera à:
@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);
}