当前位置: 首页 > 知识库问答 >
问题:

MapStruct/mapping接口字段/java

朱通
2023-03-14

以下是我的DTO:

bookdto.java:

@Data
@Document
public class BookDTO {

    @Id
    private UUID id;
    private BookSpecificationsDTO specifications;

}

BookSpecificationsDTO接口:

public interface BookSpecificationsDTO {
    BookSpecificationsTypeDTO type = null;

    default BookSpecificationsTypeDTO getType() {
        return type;
    }
}
public enum BookSpecificationsTypeDTO{

    CLASSIC,
    PHANTASY
}
@Data
public class ClassicBookSpecificationDTO implements BookSpecificationsDTO {
    private BookSpecificationsTypeDTO type = BookSpecificationsTypeDTO.CLASSIC;
    private String genre;
    private int length;
}
@Data
    public class PhantasyBookSpecificationDTO implements BookSpecificationsDTO {
        private BookSpecificationsTypeDTO type = BookSpecificationsTypeDTO.PHANTASY;
        private String genre;
   }
@Data
@Document
public class Book {

    @Id
    private UUID id;
    private BookSpecifications specifications;

}

书目规格界面:

public interface BookSpecifications {
    BookSpecificationsType type = null;

    default BookSpecificationsType getType() {
        return type;
    }
}

BookSpecificationStype:

public enum BookSpecificationsType{

    CLASSIC,
    PHANTASY
}

ClassicBookSpecification:

@Data
public class ClassicBookSpecification implements BookSpecifications {
    private BookSpecificationsType type = BookSpecificationsType.CLASSIC;
    private String genre;
    private int length;
}
@Data
    public class PhantasyBookSpecification implements BookSpecifications {
        private BookSpecificationsType type = BookSpecificationsType.PHANTASY;
        private String genre;
   }
@Mapper(componentModel = "spring", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public interface BookMapper {
        
    @Mapping(target = "id", expression = "java(java.util.UUID.randomUUID())")
    Book toBook(BookDTO bookDTO);

}
java: The return type BookSpecificationsDTO is an abstract class or interface. Provide a non abstract / non interface result type or a factory method.
java: Can't map property "BookSpecificationsDTO specifications" to "BookSpecifications specifications". Consider to declare/implement a mapping method: "BookSpecifications map(BookSpecificationsDTO value)".

所以,我的问题是我能以某种方式得到这份工作吗?在这种情况下,如果其中一个字段是接口,是否可以将bookdto.java映射到book.java?提前感谢!

共有1个答案

温举
2023-03-14

当目标类型是接口或抽象类时,必须具备以下条件之一:

  • @objectFactory注释的方法,它将创建目标对象
  • 使用@BeanMapping(resultType=xxx.class)定义结果类型的映射方法

在您的情况下,由于您的接口没有设置器,问题稍微复杂一些。因此,您需要对类型细化映射(或向下转换映射)的支持,这是当前的一个特性请求,还不可能开箱即用

 类似资料:
  • 问题内容: 我在Java中有一个基本问题,但这是OOP中的一个普遍问题。为什么界面允许设置字段?这是否与接口应该做的工作背道而驰? 按照我的理解,接口就是英语中的形容词。因此,如果我的课程实现了Runnable和Serializable接口,那么我向用户保证我的课程将满足Runnable和Seriablizable的条件。但是,这意味着接口是“无状态的”,但是允许它们在Java中具有字段… 我想念

  • 在Java中我有一个基本的问题,但在OOP中它是一个一般的问题。为什么接口允许设置字段?这难道不是与接口应该做的相反吗? 按照我的理解,interface在英语中是一个形容词。因此,如果我的类实现了Runnable和Serializable接口,我就向用户保证我的类将满足Runnable和Serializable的条件。然而,这将意味着接口是“无状态”的,但它们被允许在Java中有字段... 我是

  • “”“@Data@Builder(toBuilder=true)@allargsconstuctor@noargsconstuctor public class ServiceAddress{private String addLine1;private String addLine2;private String city;private String state;private String

  • 我想知道当使用MapStruct传递@上下文参数,或者使用干净的源到目标映射函数,以及在接口/抽象类中使用我需要的任何外部参数作为字段时,哪种做法被认为是更好的做法?谢谢

  • 假设我有这些实体: null

  • 嗨,到目前为止,我已经能够在简单的类之间进行映射了。现在我必须在接口之间进行映射。假设我有两个接口,其中许多类实现了这些接口。由于我没有了解如何做,我已经映射到特定类型的接口a。现在我需要做反向映射,其中属性可能在子类中,如何在这种情况下做反向映射。我尝试了@ inheritaninverseconfigurationin标签,但没有成功。< br >如果我能得到一些代码片段来理解,而不是阅读描述