0
public class Model {
}

public class SuperclassDTO {
    private boolean funny = true;

    public boolean isFunny() {
        return funny;
    }

    public boolean setFunny(boolean f) {
        this.funny = f;
    }
}

public class SubclassDTO extends SuperclassDTO {
}


new SubclassDTO().isFunny() //returns true
SubclassDTO dto =  binder.bindFromBusinessObject(SubclassDTO.class, new Model());
dto.isFunny(); //returns false!!!!

这不是很奇怪吗?模型类没有“有趣”的字段,但 dto 以某种方式绑定了错误的值。首先,我认为 jDTO 需要“getFunny”约定,因此它无法读取该值并将其设置为“false”,但将 getter 名称更改为“getFunny”并不能解决问题,而且我不允许修改 SuperclassDTO。如何绑定正确的值?

顺便说一下jdto 1.4版...

4

1 回答 1

0

您遇到的行为是约定优于配置方法的“副作用”。DTO 上的所有字段都已配置,除非您使用@DTOTransient注释或transientXML 文件上的配置将它们标记为瞬态。如果配置的字段在源 bean 上没有对应的字段,它将被设置为默认值,这就是您遇到此行为的原因。

你有一些选择来克服这个问题:

  • @DTOTransient注释添加到 DTO。
  • 由于您无法修改 DTO,您可以通过 XML 对其进行配置。
  • 使用绑定生命周期来恢复值。通过在子类上添加代码。

您不妨在 github 上提交一份关于 jDTO 问题跟踪器的错误报告。

于 2014-01-29T13:18:56.507 回答