假设我有包含以下字段的传入对象:
class IncomingRequest {
// ... some fields ommited
String amount; // e.g. "1000.00"
String currency; // e.g. "840"
}
还有更多的字段可以转换为我的DTO:
class MyDto {
// ... some fields which converts great ommited
Amount amount;
}
class Amount {
Long value;
Integer exponent;
Integer currency;
}
,但我想以自定义的方式映射这两个:
@Mapper
public interface DtoMapper {
@Mappings({ ... some mappings that works great ommited })
MyDto convert(IncomingRequest request);
@Mapping( /* what should I use here ? */ )
default Amount createAmount(IncomingRequest request) {
long value = ....
int exponent = ....
int currency = ....
return new Amount(value, exponent, currency);
}
这意味着我只需要编写一个方法来将incomingrequest
的几个字段转换为嵌套的DTO对象。我该怎么做呢?
Upd:我不介意只将转换后的参数传递给方法:
default Amount createAmount(String amount, String currency) {
...
}
那就更好了。
好吧,有一个构造映射方法参数如下所示:
@Mapper
public interface DtoMapper {
@Mapping( target = "amount", source = "request" /* the param name */ )
MyDto convert(IncomingRequest request);
// @Mapping( /* what should I use here ? Answer: nothing its an implemented method.. @Mapping does not make sense */ )
default Amount createAmount(IncomingRequest request) {
long value = ....
int exponent = ....
int currency = ....
return new Amount(value, exponent, currency);
}
或者,您可以进行后映射。
@Mapper
public interface DtoMapper {
@Mapping( target = amount, ignore = true /* leave it to after mapping */ )
MyDto convert(IncomingRequest request);
@AfterMapping( )
default void createAmount(IncomingRequest request, @MappingTarget MyDto dto) {
// which completes the stuff you cannot do
dto.setAmount( new Amount(value, exponent, currency) );
}
注意:您可以省略java8中的@mappings
这是我的DTO: 这是我的实体: 我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。这可能吗?
例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?
有没有什么方法可以将嵌套的JSON值映射到字段而不需要额外的类?我有一个JSON响应 但是在中,我只需要值。因此,我决定创建Kotlin数据类,并尝试使用注释的选项 下面的代码正在工作 我有几个嵌套值,为它们创建额外的类是相当夸张的。还有比为节点创建嵌套类更好的方法吗?
假设我有这些实体: null
我有一个带有对象的RealmObject类,它实际上是PrimaryKey作为这个对象中的字符串。但不允许将对象作为主键。 因为目前不可能更改服务器的响应结构,所以我尝试了不同的方法来解决这个问题。但到目前为止,没有一个奏效。我在Android Studio中使用“io.realm:realm-gradle-plugin:0.87.2”作为和“realm-android”插件。 谢谢beeende
我有两个对象,除了date成员外,其他成员都相同。在obj1中,date是java.sql.date,obj2.date是long(纪元)。 我需要编写一个映射器来将obj1映射到obj2。这就是我试图做的: 但是mapperImpl只有自己的日期转换实现: 我得到了: 这种转换的正确方式是什么?