我有下面的班级结构。
public class Comment
{
private Integer id;
private String text;
//getters & setters
}
@Mapper(componentModel = "spring")
public interface CommentMapper
{
String map(Comment comment);
Comment map(String text);
//Comment map(String someNameHere);
}
@Override
public String map(Comment comment) {
if ( comment == null ) {
return null;
}
String string = new String();
return string;
}
@Override
public Comment map(String text) {
if ( text == null ) {
return null;
}
Comment comment = new Comment();
comment.setText( text );
return comment;
}
/*
@Override
public Comment map(String someNameHere) {
if ( someNameHere == null ) {
return null;
}
Comment comment = new Comment();
return comment;
}
*/
问题1:map
方法将comment
对象作为参数并返回字符串,它只是返回一个空字符串对象,而不是设置字符串的text
属性并返回它。为什么?如何返回comment
对象的text
属性?
问题2:当map方法的参数名为text
时,它使用类中的text
属性生成实现,否则只生成空的comment
对象。我很惊讶地发现mapstruct生成的不同实现也取决于参数名。有什么解释吗?
注意:comment
对象在另一个对象中用作属性。在那里我需要上面提到的行为。现在我是这样管理的。@mapping(source=“entity.comment.text”,target=“comment”)@mapping(source=“dto.comment”,target=“comment.text”)
MapStruct的bugtracker中也存在类似的问题(#584不能创建返回对象为字符串的方法):
MapStruct通常在Java bean上操作,即它期望源和目标对象的属性。对于您的情况,我只需将映射器作为一个抽象类,并从手工实现方法(代码生成实际上不会给您带来任何优势):
String dtoToString(Dto dto) {
return dto.getField1();
}
然后,其他(生成的)方法可以使用该方法将DTO属性映射到string属性。不用在抽象映射器本身上声明这个手动编写的方法,您还可以在另一个类上声明它,并通过@mapper#use()
导入它。
--https://github.com/mapstruct/mapstruct/issues/584#issuecomment-117523614
你现在做的方式很好,我会坚持下去。
我使用Mapstruct(1.2.0.final)来映射dto对象,我希望将对象的属性提取到它自己的对象实例。 如何做到这一点?或者有没有更方便的方法来去掉只有一个属性的(无用的)对象? 提前谢了。
映射器类如下所示:
我不确定我错过了什么。我的自定义逻辑适用于我为目标指定的所有字符串属性,而不仅仅是一个。 图像映射器: 购物产品映射器: 生成的mapstruct类: 为什么描述字段也与toFullImagePath一起使用? 这个“@Mapping(target=“fullImagePath”,source=“thumbPath”)不应该指定我只想更改fullImagePath吗?
是否有可能映射包的私有属性(不使用lombok)。我们成功地将包私有类映射到DTO,但为了成功映射属性,我们需要它们具有公共getter和setter。 我安慰自己,这个类仍然是包私有的,但在属性之前它是公开的:) 谢谢!亚历克斯。
问题内容: 我有一个bse64encoded字符串,来自外部源(Android商店)的公钥,我需要使用它来验证签名内容。如何将字符串转换为java.security.PublicKey接口的实例。如果这有所作为,我使用Java 6。 密钥是(可能)使用标准的Java库而不是有弹性的城堡生成的(它来自远程团队,所以我不确定)。他们的示例代码说使用Security.generatePublicKey(
我是Mapstruct的新手,我正在努力正确理解它。 我想实现的是从DTO字符串参数(carModel)转换为他的实体,使用服务和存储库进行检索。 问题是Mapstruct生成的Mapper类正在尝试向Service类注入注释,但它不起作用。服务为空。 这是我的课程: 类: 类: DTO和实体类: 构建工作正常,但当我尝试使用Mapper时,应用程序停止。它说carModelService是空的。