我有這樣的 DTO
@Data
public class MessageDTO implements Serializable {
private Long id;
}
和一個物體
@Entity
@Data
public class Message implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "timestamp")
private Instant timestamp;
}
我想創建一個映射器來將 DTO 映射到物體。如何使該欄位private Instant timestamp;具有 Instant.now() 之類的值?
到目前為止我的映射器
@Mapper(componentModel = "spring", imports = Instant.class)
public interface MessageMapper extends EntityMapper<MessageDTO, Message> {
@Override
@Mapping(target = "timestamp", source = "" ,defaultExpression = "java(Instant.now())")
Message toEntity(MessageDTO dto);
}
它得到了編譯錯誤
Compilation failure
[ERROR] /D:/Shared/projects/IdeaProjects/medical/src/main/java/io/medical/service/mapper/MessageMapper.java:[22,45] No property named "" exists in source parameter(s)
uj5u.com熱心網友回復:
問題是由于source是空的。洗掉source并使用expression代替defaultExpression。
@Mapper(componentModel = "spring")
public interface MessageMapper extends EntityMapper<MessageDTO, Message> {
@Override
@Mapping(target = "timestamp", expression = "java(Instant.now())")
Message toEntity(MessageDTO dto);
}
當存在源但決議時源為空時,defaultExpression可以方便地為目標分配值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443674.html
上一篇:休眠不保存連接列ID
下一篇:身份驗證過濾器上的403禁止錯誤
