я делаю приложение, у которого есть так back часть как часть front. Вещь состоит в том, что в back у меня есть два равных объекта (только он изменяет поле) и один - тот, которого я сохраняю в базе данных и другом, который мне посылает front.
Это были бы мои объекты:
public class UsuarioMongo {
private String username;
private Binary avatar;
private String pass;
}
publc class UsuarioFront {
private String username;
private byte[] avatar;
private String pass;
}
Эти модели подвержены изменениям и поэтому я нуждаюсь в каком-то способе обращать объект в другой и потом отдельно преобразовывать изображение. В настоящее время это у меня есть как строитель, где я помещаю одному один все поля, которые посылают меня, но просвет, каждый раз, когда добавлялось поле к модели было бы нужно касаться кода и это что-то, что нравилось бы мне предотвращать.
Для того, чтобы была сделана идея о том, что я ищу, оно было бы чем-то как это (не, если смогли с objectMapper):
ObjectMapper obMapper = new ObjectMapper();
UsuarioMongo usuarioMongo = obMapper.algunMetodoEspecifico(usuarioFront);
usuarioMongo.setAvatar(new Binary(usuarioFront.getAvatar()));
Так из-за многих полей, которые он добавлялись бы пока они были в двух моделях, не было бы надо касаться кода.
То, что я использую в этих случаях, та librerГ - в remap и другой альтернативы, которую я использовал, modelmapper , с этими книжными магазинами ты можешь превращать объекты формы в, в котором ты нуждаешься.
оставил Тебе пример с твоими организациями:
import com.remondis.remap.Mapper;
import com.remondis.remap.Mapping;
public class ConvertionTest {
private static Mapper<UsuarioFront, UsuarioMongo> to;
private static Mapper<UsuarioMongo, UsuarioFront> from;
public static void main(String[] args) {
to = Mapping.from(UsuarioFront.class).to(UsuarioMongo.class)
// Con esta propiedad omitimos todos los campos que no sean comunes entre Front y Mongo
.omitOtherSourceProperties()
// aqui omitimos el campo que es del mismo nombre pero de diferente tipo de datos
.omitInDestination(UsuarioMongo::getAvatar)
.mapper();
from = Mapping.from(UsuarioMongo.class).to(UsuarioFront.class)
// Con esta propiedad omitimos todos los campos que no sean comunes entre Mongo y Front
.omitOtherDestinationProperties()
.omitInSource(UsuarioMongo::getAvatar)
.mapper();
UsuarioFront front = new UsuarioFront();
front.setAvatar("java".getBytes());
front.setPass("clave");
front.setUsername("Java");
// Ejemplo de conversion de Front a Mongo
UsuarioMongo mongo = to.map(front);
System.out.println(mongo);
// Ejemplo de conversion de Mongo a Front
UsuarioFront conf = from.map(mongo);
System.out.println(conf);
}
}
// Salida de consola
UsuarioMongo{username='Java', avatar=null, pass='clave'}
UsuarioFront{username='Java', avatar=null, pass='clave'}
, который могут процеживать обращенный собственный, чтобы конвертировать поле аватар caundo, не того же типа, если встреча этот случай я обновляю ответ.
, Если ты в серба мой ответ помечать ее с правильной, чтобы помогать другим с видимостью.
Естественно, что, если ты нуждаешься в большем количестве полей, ты был должен обновлять модели в твоем коде, так как идея об этих не состоит в том, чтобы быть динамической, если не служить "моделями" в приложение во время того, чтобы нести данные.
Относительно превращения объектов, ты мог бы создавать строитель объект, который получал бы как параметр другой, чтобы быть созданным, таково, который я схватил.
UsuarioMongo(UsuarioFront front){
this.username = front.getUsername();
this.pass = front.getPass();
this.avatar = new Binary(front.getAvatar());
}
Для того, чтобы тебя так смогло называть это
UsuarioMongo mongo = new UsuarioMongo(usuarioFront);
remap import com.remondis.remap.Mapper; import com.remondis.remap.Mapping;
– Roberto E Moran 23.12.2019, 18:59