标签: dozer

dozer布尔属性映射

如果该属性的访问者被定义为isProperty()而不是,则Dozer似乎不会映射布尔属性getProperty().

以下groovy脚本说明了问题:

import org.dozer.*

class ProductCommand {
    Boolean foo 
}

public class ProductDto  {

    private Boolean foo;        

    public Boolean isFoo() { this.foo }    
    public void setFoo(Boolean p0) { this.foo = p0 }           
}

def mapper =  new DozerBeanMapper()

dto = new ProductDto(foo: true)
assert dto.isFoo()

ProductCommand mappedCmd = mapper.map(dto, ProductCommand)
assert mappedCmd.foo
Run Code Online (Sandbox Code Playgroud)

最后一行的断言失败了.不过,如果我重新命名ProductDto.isFoo(),以ProductDto.getFoo()它传递.

是否有我可以在Dozer映射文件中设置的标志/选项,它将指示它使用布尔属性的访问器isget访问器?或者,我可以为每个布尔属性添加自定义规则,但这不是很吸引人.

虽然上面的例子是用Groovy编写的,但我没有理由相信相同的Java代码不会表现出同样的行为.

这些DTO由JAXB生成(它生成"is"访问器,而不是booleans的"get"访问器),因此我无法重命名访问器.我正在使用Dozer 5.3.2.

java groovy dozer

11
推荐指数
2
解决办法
1万
查看次数

是否可以配置Dozer,以便默认情况下通过setter-/getter方法直接访问字段

我必须映射一个复杂的Java类结构,它通常不会通过set-/get-methods暴露它们的字段(这是给定的,不能更改).因此,映射只能在直接字段访问上执行.推土机允许个别字段可访问,但我没有找到设置使这成为一般行为.因此,我不必为了使其可访问而明确地映射每个字段!

这个选项存在吗? - 在课堂上? - 在全球范围内?

java mapping dozer

11
推荐指数
1
解决办法
4465
查看次数

如何在Spring Boot中使用Dozer?

我正在开发一个Spring Boot项目.我只有注释配置.我想包括推土机将实体转换为DTO,将DTO转换为实体.我在dozer网站上看到,他们解释说我必须在spring xml配置文件中添加以下配置.由于我没有xml文件而是注释配置Java类,我不知道如何将其转换为Java Configuration类.

<bean id="org.dozer.Mapper" class="org.dozer.DozerBeanMapper">
  <property name="mappingFiles">
    <list>
      <value>dozer-global-configuration.xml</value>
      <value>dozer-bean-mappings.xml</value>
      <value>more-dozer-bean-mappings.xml</value>
    </list>
  </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

如果有人能给我一个例子,它会非常有用.谢谢

java spring annotations dto dozer

11
推荐指数
3
解决办法
2万
查看次数

在Spring MVC中将视图模型映射到数据库模型时验证相关数据

我正在研究java spring mvc应用程序,并且有一个关于将视图模型对象映射到数据库模型对象的重要问题.我们的应用程序使用dozer映射器来实现此目的.

假设我有一个Person模型和BaseInformation模型.该BaseInformation模式是可以在所有其他机型上使用,例如一般数据性别,颜色,单位,....

BaseInformation:

class BaseInformation{
   private Long id;
   private String category;
   private String title;
}
Run Code Online (Sandbox Code Playgroud)

这可以有一个像这样的数据库表:

Id | Category | Title 
-------------------------
1  | "gender" | "male"
2  | "gender" | "female"
3  | "color"  | "red"
4  | "color"  | "green"
...
Run Code Online (Sandbox Code Playgroud)

这是我的人物模型的一部分:

public class Person{
     ...
     private BaseInformation gender;
     ...
}
Run Code Online (Sandbox Code Playgroud)

这是我的RegisterPersonViewModel的一部分

public class RegisterPersonViewModel{
    ...
    private Integer gender_id; …
Run Code Online (Sandbox Code Playgroud)

java oop mapping spring-mvc dozer

11
推荐指数
1
解决办法
1262
查看次数

Dozer:没有默认构造函数的类映射

让我们说我想映射以下两个类:

public class A {

    String member;

    public void setMember(String member) { this.member = member }
    public String getMember() { return member }
}

public class B {

    String member;

    public B(String member) { this.member = member }

    public String getMember() { return member }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我想要Dozer进行以下转换时:dozerBeanMapper.map( a, B.class );由于缺少类的默认构造函数,我收到错误B.

解决这个问题的最佳方法是什么?使用自定义转换器?

java dozer

9
推荐指数
1
解决办法
7403
查看次数

将一个类的字段复制到另一个类的相同字段中

我有这个问题.但是我很难解释,因为我不知道使用的确切术语.希望有人能理解.我会试着尽力而为.我觉得这与此有很大关系parsing

说有两个班.在这两个类中我都有一些变量,比如字符串(只是为了简单起见,变量类型可以是任何变量),它们具有相似的名称.

Eg:
    class ClassA{
        String x,y,z;
    }

    class ClassB{
        String x,y,z;
    }
Run Code Online (Sandbox Code Playgroud)

现在,我需要的是,我需要将一个类的变量值的值复制到其他类对应的变量.

Eg:
    ClassA aa=new ClassA();
    ClassB bb=new ClassB();
    //set bb's variables
    aa.x=bb.x;
    aa.y=bb.y;
    aa.z=bb.z;
Run Code Online (Sandbox Code Playgroud)

像那样.

但请注意,我需要的不是上述方法.我希望有一种方法可以编写一个简单的方法,以便它通过传递给它的名称来识别相关变量.然后它会相应地进行值赋值.

我想象的方法是这样的,

void assign(String val){        
    // aa.<val>=val
}
Run Code Online (Sandbox Code Playgroud)

例如,如果您传递bb.xassign(...)方法,那么它将进行aa.x=bb.x分配.

希望这很清楚.必须有更好的方法来解释这一点.如果有人知道,请编辑帖子(+标题)以使其更清晰(但保存我的想法)..

如果有办法实现这一点,请告诉我.

谢谢!

java parsing javabeans dozer

9
推荐指数
3
解决办法
2万
查看次数

推土机试图将类映射到其界面

使用我的数据模型,它基本上是一个带有父项子项的树,Dozer在将字段(使用接口类型作为参数)解释为类时尝试成功映射它们,并尝试使用构造函数实例化它.这导致以下异常;

ERROR [MappingProcessor] - Field mapping error -->
MapId: null
Type: null
Source parent class: com.*.shared.model.Module
Source field name: parent
Source field type: class com.*.shared.model.Datawarehouse
Source field value: com.*.shared.model.Datawarehouse@706ce458
Dest parent class: com.*.shared.model.Module
Dest field name: parent
Dest field type: com.*.shared.model.Model
org.dozer.MappingException: java.lang.NoSuchMethodException: com.*.shared.model.Model.<init>()
Run Code Online (Sandbox Code Playgroud)

这是一个相同类的映射,并且Whilst Dozer正确地将源类上的父字段标识为Datawarehouse类型,因为其父类的Module类上的set方法使用Model接口作为其参数,它似乎是在尝试实例化模型的类型,当然,因为Model是一个没有构造函数的接口,而不是Datawarehouse,因为源类字段指示.

我知道使用bean-factory来改变标准的映射行为,但我很惊讶这是解决这个问题的唯一方法.在我看来,Dozer已经拥有了它所需的信息,因为它识别了源类类型,并且我不同意它会尝试实例化setter签名指定的接口而不是它试图映射的类型.

有什么建议?

java mapping interface dozer

8
推荐指数
1
解决办法
1468
查看次数

与Spring引导devtools相关的推土机映射异常

我遇到了一个非常奇怪的异常,我不知道如何找到原因.

商业背景:添加商品并同时列出价格表,商品有差价水平用户的5个价格.

在控制器中,首先使用dozer将goodForm转换为商品,然后调用goodsService来保存商品.在货物服务保存货物后,遍历货物价格表并填充货物ID到货物价格,

GoodsForm:
@Mapping("priceList")
List<GoodsPriceForm> goodsPriceFormList;
Goods:
List<GoodsPrice> priceList;

Controller: 
Goods goods = BeanMapper.map(goodsForm, Goods.class);
goodsService.saveGoods(adminId, goods);

GoodsService:
goodsDao.save(goods);
goods.getPriceList().forEach(p -> p.setGoodsId(goods.getId()));
goodsPriceDao.save(goods.getPriceList());
Run Code Online (Sandbox Code Playgroud)

但它抛出异常:

2015-11-27 17:10:57,042 [http-nio-8081-exec-8] ERROR o.a.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: com.foo.goods.model.GoodsPrice cannot be cast to com.foo.goods.model.GoodsPrice] with root cause
java.lang.ClassCastException: com.foo.goods.model.GoodsPrice cannot be cast to com.foo.goods.model.GoodsPrice
at com.foo.goods.service.GoodsService$$Lambda$11/310447431.accept(Unknown Source) ~[na:na]
at java.util.ArrayList.forEach(ArrayList.java:1249) ~[na:1.8.0_51]
at com.foo.goods.service.GoodsService.saveGoods(GoodsService.java:34) ~[classes/:na]
Run Code Online (Sandbox Code Playgroud)

这个错误信息让我感到很困惑.另外我写一个单元测试想重复这个,但失败了.

GoodsForm form = new …
Run Code Online (Sandbox Code Playgroud)

java classloader dozer spring-boot

8
推荐指数
1
解决办法
3139
查看次数

推土机映射内部类

我需要使用dozer框架将A类映射到C类.

public class A {

private String fielda1;
private String fielda2;

public String getFielda1() {
    return fielda1;
}
public void setFielda1(String fielda1) {
    this.fielda1 = fielda1;
}
public String getFielda2() {
    return fielda2;
}
public void setFielda2(String fielda2) {
    this.fielda2 = fielda2;
}
}


public class B {
private List<C> cList;

public List<C> getcList() {
    return cList;
}
public void setcList(List<C> cList) {
    this.cList = cList;
}

public static class C {
    private String fieldc1;
    private String fieldc2;

    public String …
Run Code Online (Sandbox Code Playgroud)

java dozer

7
推荐指数
1
解决办法
1万
查看次数

推土机5.3.2.以编程方式设置定制转换器

如何以编程方式为推土机设置自定义转换器?以下代码不起作用:

定制转换器实现:

class ConverterImpl extends DozerConverter<A, B> {

ConverterImpl() {
    super(A.class, B.class);
}

@Override
public B convertTo(A source, B destination) {
    return destination;
}

@Override
public A convertFrom(B source, A destination) {
    return destination;
}
}
Run Code Online (Sandbox Code Playgroud)

测试代码:

DozerBeanMapper mapper = new DozerBeanMapper();
mapper.setCustomConverters(Collections.<CustomConverter>singletonList(new ConverterImpl()));
A a = new A(); 
B b = mapper.map(a, A.class);  
Run Code Online (Sandbox Code Playgroud)

运行上面的代码后,不会调用自定义转换器.怎么了?

java dozer

7
推荐指数
1
解决办法
8830
查看次数