java 在MapStruct Spring Core中有效地删除审计字段的重复@Mapping注解

xqkwcwgp  于 2023-05-21  发布在  Java
关注(0)|答案(1)|浏览(236)

有很多方法可以删除相同的忽略Map,而不需要在不同的方法上重复@Mapping注解,例如在一个简短的注解或接口中的审计字段,如IgnoreMappingAuditionFields或其他方式?那么你能推荐什么方法来解决这个问题呢?

@Mapper(config = MapperConfiguration.class)
public interface CategoryMapper {
    CategoryDto toDto(final Category category);

    @Mapping(target = "createdAt", ignore = true)
    @Mapping(target = "updatedAt", ignore = true)
    @Mapping(target = "createdBy", ignore = true)
    @Mapping(target = "modifiedBy", ignore = true)
    @Mapping(target = "id", ignore = true)
    @Mapping(target = "quizzes", ignore = true)
    @Mapping(target = "parentCategory.createdAt", ignore = true)
    @Mapping(target = "parentCategory.updatedAt", ignore = true)
    @Mapping(target = "parentCategory.createdBy", ignore = true)
    @Mapping(target = "parentCategory.modifiedBy", ignore = true)
    @Mapping(target = "parentCategory.id", ignore = true)
    @Mapping(target = "parentCategory.quizzes", ignore = true)
    Category toCategory(final CategoryDto categoryDto);

    @Mapping(target = "createdAt", ignore = true)
    @Mapping(target = "updatedAt", ignore = true)
    @Mapping(target = "createdBy", ignore = true)
    @Mapping(target = "modifiedBy", ignore = true)
    @Mapping(target = "id", ignore = true)
    @Mapping(target = "quizzes", ignore = true)
    @Mapping(target = "parentCategory.createdAt", ignore = true)
    @Mapping(target = "parentCategory.updatedAt", ignore = true)
    @Mapping(target = "parentCategory.createdBy", ignore = true)
    @Mapping(target = "parentCategory.modifiedBy", ignore = true)
    @Mapping(target = "parentCategory.id", ignore = true)
    @Mapping(target = "parentCategory.quizzes", ignore = true)
    @Mapping(target = "parentCategory", ignore = true)
    @Mapping(target = "childCategories", ignore = true)
    Category toDomain(final CategoryCreationRequest categoryCreationRequest);
}

删除重复字段

ui7jx7zq

ui7jx7zq1#

一种解决方案是将多个Map注解组合到一个自定义注解中。例如,您可以创建一个注解来忽略审计Map:

@Target({ElementType.METHOD})
@Retention(RUNTIME)
@Mapping(target = "createdAt", ignore = true)
@Mapping(target = "updatedAt", ignore = true)
@Mapping(target = "createdBy", ignore = true)
@Mapping(target = "modifiedBy", ignore = true)
public @interface IgnoreAuditMapping {}

注解可以在Map器中使用以减少重复:

@Mapper(config = MapperConfiguration.class)
public interface CategoryMapper {
    ...

    @IgnoreAuditMapping
    @Mapping(target = "id", ignore = true)
    @Mapping(target = "quizzes", ignore = true)
    @Mapping(target = "parentCategory.createdAt", ignore = true)
    @Mapping(target = "parentCategory.updatedAt", ignore = true)
    @Mapping(target = "parentCategory.createdBy", ignore = true)
    @Mapping(target = "parentCategory.modifiedBy", ignore = true)
    @Mapping(target = "parentCategory.id", ignore = true)
    @Mapping(target = "parentCategory.quizzes", ignore = true)
    Category toCategory(final CategoryDto categoryDto);

    ...
}

相关问题