- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下类结构。
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);
}
下面是mapstruct生成的实现
@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:以 Comment
对象作为参数并返回字符串的 map
方法只是返回一个空字符串对象,而不是设置 text
属性字符串并返回它。为什么?以及如何获取返回的 comment
对象的 text
属性?
问题2:当映射方法的参数名称为 text
时,它会利用类中的 text
属性生成实现,否则只是空的 comment
对象。我真的很惊讶地看到 mapstruct 生成不同的实现也取决于参数名称。有什么解释吗?
注意:Comment
对象用作另一个对象内的属性。我需要上述行为。现在我就这样管理。@Mapping(source = "entity.comment.text", target = "comment")@Mapping(source = "dto.comment", target = "comment.text")
最佳答案
MapStruct 的 bugtracker ( #584 Cannot create a method where the returned object is a String ) 中存在与您类似的问题:
MapStruct generally operates on Java beans, i.e. it expects properties on the source and target objects. For your case I'd just make the mapper an abstract class and implement the method from hand (code generation would give you no advantage really):
String dtoToString(Dto dto) {
return dto.getField1();
}That method can then be used by other (generated) methods for mapping a DTO property into a string property. Instead of declaring this manually written method on an abstract mapper itself you also can declare it on another class and import it through
@Mapper#uses()
.-- https://github.com/mapstruct/mapstruct/issues/584#issuecomment-117523614
恕我直言,你目前的做法很好,我会坚持下去。
关于java - mapstruct:如何从mapstruct中对象的属性构造字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111998/
我是一名优秀的程序员,十分优秀!