Конвертировать от одного объекта другого

я делаю приложение, у которого есть так 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()));

Так из-за многих полей, которые он добавлялись бы пока они были в двух моделях, не было бы надо касаться кода.

0
задан 23.12.2019, 15:08
2 ответа

То, что я использую в этих случаях, та 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, не того же типа, если встреча этот случай я обновляю ответ.

, Если ты в серба мой ответ помечать ее с правильной, чтобы помогать другим с видимостью.

1
ответ дан 23.12.2019, 22:06
  • 1
    Что importació n está s используя? У меня выходит эта ошибка, прикрепив этот có я говорю The method from (Class< UsuarioFront>) is undefined for the type Mapping. importació n, что есть у меня, этот: import org.modelmapper.spi. Mapping; – jdflores 23.12.2019, 17:16
  • 2
    Чтобы использовать modelmapper он import org.modelmapper. ModelMapper; – Roberto E Moran 23.12.2019, 18:09
  • 3
    и если ты используешь remap import com.remondis.remap.Mapper; import com.remondis.remap.Mapping; – Roberto E Moran 23.12.2019, 18:59

Естественно, что, если ты нуждаешься в большем количестве полей, ты был должен обновлять модели в твоем коде, так как идея об этих не состоит в том, чтобы быть динамической, если не служить "моделями" в приложение во время того, чтобы нести данные.

Относительно превращения объектов, ты мог бы создавать строитель объект, который получал бы как параметр другой, чтобы быть созданным, таково, который я схватил.

UsuarioMongo(UsuarioFront front){
     this.username = front.getUsername();
     this.pass = front.getPass();
     this.avatar = new Binary(front.getAvatar());
}

Для того, чтобы тебя так смогло называть это

UsuarioMongo mongo = new UsuarioMongo(usuarioFront);
1
ответ дан 23.12.2019, 22:06