我如何使用映射器翻译变量类型? (DTO 到 DAO)
How can i translate variable type with mapper? (DTO to DAO)
我想使用构建器和映射器来发送和接收 DTO - DAO - DTO。
这是我的 Dto class、映射器、DAO、控制器和服务函数。
我想通过 select 从 ConfigureRepository 将字符串 'voucherType' 设置为配置 'VoucherType'。
Dto Class
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ItemDto {
@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public static class CreateReq {
@NotBlank
private String name;
@NotNull
private String voucherType;
public Item createReqToEntity() {
/* additional jobs for create entity? */
return ItemMapper.INSTANCE.createReqToEntity(this);
}
}
...
映射器
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ItemMapper {
ItemMapper INSTANCE = Mappers.getMapper(ItemMapper.class);
Item createReqToEntity(ItemDto.CreateReq createReq);
Item updateReqToEntity(ItemDto.UpdateReq updateReq);
ItemDto.CreateRes entityToCreateRes(Item item);
ItemDto.UpdateRes entityToUpdateRes(Item item);
}
这是一个构造函数,将被映射器使用
public class Item {
@Builder
private Voucher(String name, String voucherType) {
this.name = name;
this.voucherType = configureRepository.findByConfigName(voucherType); // FK but i cannot import 'configureRepository.. why?'
this.id = FMSFactory.uuid();
this.created = new Date();
this.updated = new Date();
}
控制器
public ItemrDto.CreateRes saveItemInfo(@RequestBody @Valid ItemDto.CreateReq
createItemReq) throws Exception {
return ItemService.saveItemInfo(createItemReq);
}
服务
public ItemDto.CreateRes saveItemInfo(ItemDto.CreateReq reqDto) {
Item newItem = ItemRepository.save(reqDto.createReqToEntity());
ItemDto.CreateRes result = ItemDto.CreateRes.entityToCreateRes(newItem);
return result;
}
构建输出
error: cannot find symbol 'this.voucherType = configureRepository.findByConfigName(voucherType)'
我需要将 createReq 中的 'String voucherType' 更改为项目 class(DAO) 中的 'Configure voucherType',但我不知道在哪里以及如何使用 Mapper 设置它。
谁能帮帮我?
我之前的问题得到了很好的回答。
我仍然可以使用 'mapStruct' 来做到这一点。
ItemMapper
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ItemMapper {
ItemMapper INSTANCE = Mappers.getMapper(ItemMapper.class);
Item createReqToEntity(ItemDto.CreateReq createReq, Configure A);
Item updateReqToEntity(ItemDto.UpdateReq updateReq, configure A);
// just overwrite specific variable like this.
// Configure A = creqteReq.A; will be replaced to
// Configure A = A;
ItemDto.CreateRes entityToCreateRes(Item item);
ItemDto.UpdateRes entityToUpdateRes(Item item);
}
只需覆盖我要翻译类型的变量。
我想使用构建器和映射器来发送和接收 DTO - DAO - DTO。
这是我的 Dto class、映射器、DAO、控制器和服务函数。
我想通过 select 从 ConfigureRepository 将字符串 'voucherType' 设置为配置 'VoucherType'。
Dto Class
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ItemDto {
@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public static class CreateReq {
@NotBlank
private String name;
@NotNull
private String voucherType;
public Item createReqToEntity() {
/* additional jobs for create entity? */
return ItemMapper.INSTANCE.createReqToEntity(this);
}
}
...
映射器
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ItemMapper {
ItemMapper INSTANCE = Mappers.getMapper(ItemMapper.class);
Item createReqToEntity(ItemDto.CreateReq createReq);
Item updateReqToEntity(ItemDto.UpdateReq updateReq);
ItemDto.CreateRes entityToCreateRes(Item item);
ItemDto.UpdateRes entityToUpdateRes(Item item);
}
这是一个构造函数,将被映射器使用
public class Item {
@Builder
private Voucher(String name, String voucherType) {
this.name = name;
this.voucherType = configureRepository.findByConfigName(voucherType); // FK but i cannot import 'configureRepository.. why?'
this.id = FMSFactory.uuid();
this.created = new Date();
this.updated = new Date();
}
控制器
public ItemrDto.CreateRes saveItemInfo(@RequestBody @Valid ItemDto.CreateReq
createItemReq) throws Exception {
return ItemService.saveItemInfo(createItemReq);
}
服务
public ItemDto.CreateRes saveItemInfo(ItemDto.CreateReq reqDto) {
Item newItem = ItemRepository.save(reqDto.createReqToEntity());
ItemDto.CreateRes result = ItemDto.CreateRes.entityToCreateRes(newItem);
return result;
}
构建输出
error: cannot find symbol 'this.voucherType = configureRepository.findByConfigName(voucherType)'
我需要将 createReq 中的 'String voucherType' 更改为项目 class(DAO) 中的 'Configure voucherType',但我不知道在哪里以及如何使用 Mapper 设置它。
谁能帮帮我?
我之前的问题得到了很好的回答。
我仍然可以使用 'mapStruct' 来做到这一点。
ItemMapper
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ItemMapper {
ItemMapper INSTANCE = Mappers.getMapper(ItemMapper.class);
Item createReqToEntity(ItemDto.CreateReq createReq, Configure A);
Item updateReqToEntity(ItemDto.UpdateReq updateReq, configure A);
// just overwrite specific variable like this.
// Configure A = creqteReq.A; will be replaced to
// Configure A = A;
ItemDto.CreateRes entityToCreateRes(Item item);
ItemDto.UpdateRes entityToUpdateRes(Item item);
}
只需覆盖我要翻译类型的变量。