Mapstruct - Generic Mapper и значение по умолчанию для NULLJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Mapstruct - Generic Mapper и значение по умолчанию для NULL

Сообщение Anonymous »

У меня есть несколько класса DTORSPONSE, каждый из которых расширяет MinidTorSponse. < /p>

Код: Выделить всё

@Data
@NoArgsConstructor
public class MiniDTOResponse extends EmptyDTOResponse {
private boolean exists;
}

@Data
public class ServicesDTOResponse extends MiniDTOResponse {
private boolean light;
private ToiletDTOResponse toilets;
private int barCounterNumber;
}
@Data
public class ToiletDTOResponse extends MiniDTOResponse {
private int numMaleRestrooms;
private int numFemaleRestrooms;
}
@Data
public class VIPDTOResponse extends MiniDTOResponse {
private int numVIPSeats;
private boolean isAccesible;
}
< /code>
и т. Д.@Data
@EqualsAndHashCode(callSuper = true)
public class BasicDTOResponse extends BasicDTO {
private Date dateDeletion;
private String userDeletion;
}

@Data
public class AttendanceDTOResponse extends BasicDTOResponse {
private int numStanding;
private int numSeats;
private ServicesDTOResponse services;
private VIPDTOResponse vip;
}

< /code>
и разные карт-карт-карт для каждого DTO. < /p>
Моя цель-вернуть что-то вроде этого, предполагая, что есть услуги и туалеты, но нет VIP < /p>
{
"id": "39F47F8B83F5653CE0631F1EA8C0D44F",
"dateDeletion": null,
"userDeletion": null,
"numStanding": 30000,
"numSeats": 20000,
"services": {
"exists": true,
"light": false,
"toilets": {
"exists": true,
"numMaleRestrooms" : 5,
"numFemaleRestrooms" : 6
},
"barCounterNumber": 6,
},
"vip": {
"exists": false,
"numVIPSeats": 0,
"isAccesible": false,
}
}
< /code>
Итак, я создал это < /p>
@Mapper(componentModel = "spring")
public interface GenericMapper {

default boolean exists(String id) {
return StringUtils.isNotBlank(id);
}
default boolean active(ZonedDateTime dateDeletion) {
return dateDeletion == null;
}

default boolean computeExists(BaseEntity entity) {
return entity != null && exists(entity.getId()) && active(entity.getFechaBaja());
}

@AfterMapping
default  void setExists(@MappingTarget T dto, K entity) {
boolean exists = computeExists(entity);
dto.setExists(hay);
}

@ObjectFactory
default  T createDto(K source, @TargetType Class dtoClass) {
try {
T dto = dtoClass.getDeclaredConstructor().newInstance();
setExists(dto, source);
return dto;
} catch (Exception e) {
throw new RuntimeException("Couldn't create DTO", e);
}
}

default  T createDTOwithExitsFalse(Class dtoClass) {
try {
T dto = dtoClass.getDeclaredConstructor().newInstance();
dto.setExists(false);
return dto;
} catch (Exception e) {
throw new RuntimeException("Couldn't create DTO", e);
}
}
}

public interface AttendanceMapper extends GenericMapper {
@Mapping(target = "numStanding", source = "standing")
@Mapping(target = "numSeats", source = "seats")
@Mapping(target = "services", source = "installations", defaultExpression = "java(createDTOwithExitsFalse(ServicesDTOResponse.class))")
@Mapping(target = "vip", source= "vipFacilities", defaultExpression = "java(createDTOwithExitsFalse(VIPDTOResponse.class))")
AttendanceDTOResponse toDto (Attendance source);
}
< /code>
и работает как очарование без необходимости писать много дефолтов на каждом карте.Ambiguous factory methods found for creating ServicesDTOResponse: T createDto(K source, @TargetType Class dtoClass), T ToiletMapper.createDto(K source, @TargetType Class dtoClass).  See https://mapstruct.org/faq/#ambiguous for more info.
, поскольку они оба расширяют GenericMapper.
Что я могу сделать? Я бы хотел сделать это агенерным способом, так как есть 40 DTORSPONES. Может быть, есть более чистый способ разрешения существуют и дефолт каждого атрибута без использования выражений, я готов узнать, как это сделать!

Подробнее здесь: https://stackoverflow.com/questions/797 ... e-for-null
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Mapstruct - Generic Mapper и значение по умолчанию для NULL
    Anonymous » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Mapstruct Mapper создает NullPointerException, потому что Mapper AutoWailired is null
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Mapstruct Mapper создает NullPointerException, потому что Mapper AutoWailired is null
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Исключение Mapper Mapper Jackson с метадаными `$ Schema` в JSON
    Anonymous » » в форуме JAVA
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Исключение Mapper Mapper Jackson с метадаными `$ Schema` в JSON
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»