- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想使用 ModelMapper 将实体转换为 DTO 并返回。大多数情况下它有效,但我如何自定义它。它有很多选择,以至于很难弄清楚从哪里开始。什么是最佳实践?
我会在下面自己回答,但如果另一个答案更好,我会接受。
最佳答案
首先这里有一些链接
ModelMapper
, 应该是您的应用程序中的单例。对我来说,这意味着使用 Spring 的 @Bean。对于简单的情况,它开箱即用。例如,假设您有两个类:
class DogData
{
private String name;
private int mass;
}
class DogInfo
{
private String name;
private boolean large;
}
ModelMapper mm = new ModelMapper();
DogData dd = new DogData();
dd.setName("fido");
dd.setMass(70);
DogInfo di = mm.map(dd, DogInfo.class);
TypeMap<DogData, DogInfo> tm = mm.getTypeMap(DogData.class, DogInfo.class);
List<Mapping> list = tm.getMappings();
for (Mapping m : list)
{
System.out.println(m);
}
PropertyMapping[DogData.name -> DogInfo.name]
Converter<DogData, DogInfo> myConverter = new Converter<DogData, DogInfo>()
{
public DogInfo convert(MappingContext<DogData, DogInfo> context)
{
DogData s = context.getSource();
DogInfo d = context.getDestination();
d.setName(s.getName());
d.setLarge(s.getMass() > 25);
return d;
}
};
mm.addConverter(myConverter);
Converter<Integer, Boolean> convertMassToLarge = new Converter<Integer, Boolean>()
{
public Boolean convert(MappingContext<Integer, Boolean> context)
{
// If the dog weighs more than 25, then it must be large
return context.getSource() > 25;
}
};
PropertyMap<DogData, DogInfo> mymap = new PropertyMap<DogData, DogInfo>()
{
protected void configure()
{
// Note: this is not normal code. It is "EDSL" so don't get confused
map(source.getName()).setName(null);
using(convertMassToLarge).map(source.getMass()).setLarge(false);
}
};
mm.addMappings(mymap);
map(source.getName()).setName(null);
MatchingStrategies.STANDARD
这是危险的。它很容易选择错误的映射并导致奇怪的、难以发现的错误。如果明年其他人向数据库添加一个新列会怎样?所以不要这样做。确保使用 STRICT 模式: mm.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
DogInfo di = mm.map(dd, DogInfo.class);
mm.validate(); // make sure nothing in the destination is accidentally skipped
mm.addMappings()
修复任何验证失败如上图所示。关于java - 如何自定义 ModelMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534172/
我想映射到一个只有一个带有 3 个参数的构造函数的源目标。我收到以下错误: Failed to instantiate instance of destination com.novasol.book
我有 2 个对象: @Setter @Getter public class Agent { public int userID; public String name; pu
我正在尝试使用 modelmapper 将我的类映射到传入请求。 看起来 Date 无法在 modelmapper 中自动转换。 Converter org.modelmapper.internal.
我想在UserDTO之间映射和 User ,但不包括一个字段,比如 city .我该怎么做,因为我认为这种方法可行,但它不起作用: ModelMapper modelMapper = new Mode
我有一个结构如下的源对象: class SourceA { int www; SourceB sourceB; } class SourceB { int xxx; int yyy;
当我尝试通过枚举将源中的字符串映射到目标中的整数时。 ModelMapper 失败。 来源 public class Request { private String classificati
我正在尝试使用 ModelMapper 将一种对象类型映射到另一种对象类型。我在 PropertyMap 实现中定义了以下映射: map().getExtended().setIncludeMaskT
我想对我的一个实体进行部分更新,但如果一个属性为 null,则要更新的实体也会将该值设置为 null。我希望如果源中的某个属性为 null,则保留源中的属性。 我已经尝试过,但没有运气: @B
我有以下 DTO 和 VO: 话音 public class ProjectVO { private Date fechaInicio; private Date fechaFin;
我正在尝试将字符串转换为日期,但转换器似乎没有被触发,并且我收到了 MappingException。这是我的代码: @Bean public ModelMapper modelMap
假设我有类 MySource: public class MySource { public String fieldA; public String fieldB; publ
当我尝试通过枚举将源中的字符串映射到目标中的整数时。 ModelMapper 失败。 来源 public class Request { private String classificati
我正在尝试使用 ModelMapper 将源映射到目标。 在我的具体情况下,在源类中有一个属性(评论列表),我必须在其中按评级求和并将该值设置为目标类。 所以我尝试使用转换器,但它不起作用。
我在映射稍微复杂一点的对象时遇到问题,实际上它只映射了对象的一半。 对象是: { "firstName": "John", "lastName": "John", "description": "It
我正在尝试使用 ModelMapper 映射以下 json,如此处所述 http://modelmapper.org/user-manual/gson-integration/但我收到 NullPoi
class A { class ADto { int id; -> int id; List b; List
我有以下实体类: class Provider{ private String providerId; private String identificationNumber;
我的结构类似于下面的: public class FirstObject { private List myListOne; ...only getter method...
我在使用 ModelMapper 框架时遇到了麻烦。请解释为什么我看到以下行为。 我在 build.gradle 中有以下依赖项 compile group: 'org.modelmapper', n
我有:返回 Date 对象的 Object1.getDataObject2.setData 获取一个字符串并填充他的字段。 我将以 yyyy-MM-dd 格式将数据对象从 src 映射到 String
我是一名优秀的程序员,十分优秀!