0

dozer で CommonsMultipartFile から byte[] にマップしようとしています。

ドーザーは CommonsMultipartFile タイプについて何も知らないので、 customConverter が必要であることはわかっているので、次のように作成しました。

    public class FileJtfConverter extends DozerConverter<CommonsMultipartFile, byte[]> {

    /**
     * Constructor
     */
    public FileJtfConverter() {
        super(CommonsMultipartFile.class, byte[].class);
    }

    @Override
    public final byte[] convertTo(CommonsMultipartFile a, byte[] b) {
        if (a != null) {
            return a.getBytes();
        }
        return null;
    }

    @Override
    public final CommonsMultipartFile convertFrom(byte[] b, CommonsMultipartFile a) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    }

そして私のdozer xmlファイル:

<mapping type="one-way">        
    <class-a>myPackage.ClassA
    </class-a>
    <class-b>myPackage.ClassB
    </class-b>
    ...
    <field custom-converter="es.xunta.formacion.sifo3.transporte.util.converter.FileJtfConverter">
       <a>anexo</a>
       <b>anexo</b>
    </field>
</mapping>

クラス A とクラス B は次のとおりです。

public class ClassA{
    ...
    private CommonsMultipartFile anexo;
    ...
    public final CommonsMultipartFile getAnexo() {
    return anexo;
    }

    public final void setAnexo(CommonsMultipartFile anexo) {
    this.anexo = anexo;
    }
}

public class ClassB{
    ...
    protected byte[] anexo;
    ...
    public void setAnexo(byte[] value) {
    this.anexo = ((byte[]) value);
    }

    public byte[] getAnexoPago() {
        return anexoPago;
    }
}

すべて問題ないようですが、例外がスローされます: org.dozer.MappingException: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException

pom.xml ファイルで依存関係を定義しているため、これはかなり奇妙です...

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>                
    </dependency>   

何か案は..?どうもありがとう!

4

1 に答える 1

3

Spring MVC を使用している場合は、CustomEditorで注釈を付けたメソッドに a を登録するだけで済みます@InitBinder

からへのByteArrayMultipartFileEditor自動変換を実行できる が既に利用可能です。MultipartFilebyte[]

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
}

byte[]の代わりに、ドメイン オブジェクト/フォームを直接保持できますMultipartFile

Spring Portlet MVC でも同じことができると思います。

于 2012-10-30T15:23:27.247 に答える