Cómo inyectar la dependencia de guice en la interfaz de mapstruct - java
Mis 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
}
Tengo una interfaz
@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);
}
Estoy planeando inyectar ese gson en lugar de nuevo Gson ()
Según esto, ¿cómo puedo combinar Guice y Mapstruct?
Traté de hacer cambios pero no estoy seguro de dónde agregar eso
@Inject
Gson gson
Lo intenté así
public interface TestjkMapper {
@Inject
Gson gson
@Named("authorityToMap")
static Map authorityToMap(Authority authority) {
return gson.tojson(authority.tostring())
}
}
Recibo un error del compilador como se muestra a continuación
variable gson might not have been initialized
cómo inyectar correctamente dentro de esa interfaz
Aqui tambien
bind(TestjkMapper.class).to(TestjkMapperImpl.class)
TestjkMapper - Mi interfaz
TestjkMapperImpl: se genera en tiempo de ejecución. Así que no estoy seguro de cómo unir esto
Pregunta exacta:
Cómo convertir de estudiante objecten estudiante Stringusando guice inyectadogson
Respuestas
Si desea utilizar componentes inyectados personalizados en sus mapeadores, deberá utilizar clases abstractas en lugar de interfaces. No puede inyectar campos en interfaces.
En su ejemplo, se verá así:
@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);
}