使用resteasy将javascript文件转换为java字节[]
我试图将一个文件从angularJS前端上传到jboss后台,但当调用服务时,我得到了这个例外:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of byte[] out of START_OBJECT token
at [Source: io.undertow.servlet.spec.ServletInputStreamImpl@1cc8ac9f; line: 1, column: 39] (through reference chain: fr.test.Document["datas"
】)
我想当我将javascript文件转换为java字节[]时,可能有问题,但我真的不知道是什么
我通过常规输入type=“file”收集文件:
<input
type="file"
style="display: none;"
onchange="angular.element(this).controller().addDocument(this)"
>
然后我用控制器中的onchange方法捕捉结果: (我在这个链接Return the Array of Bytes from FileReader()上读到,我必须使用一个承诺,即返回字节数组)
...
ctrl.addDocument = function(element){
var file = element.files[0];
var fileData = new Blob([element.files[0]]);
var promise = new Promise(
function(resolve){
var reader = new FileReader();
reader.readAsArrayBuffer(fileData);
reader.onload = function() {
var arrayBuffer = reader.result
var bytes = new Uint8Array(arrayBuffer);
resolve(bytes);
}
}
);
promise.then(function(data) {
var document = {
name: file.name,
type: file.type,
datas: data
};
console.dir(document);
ctrl.doc = document;
}).catch(function(err) {
console.log(err);
growl.error('Unable to upload file');
});
}
...
最后,使用rest服务调用backoffice。以下是我的后台服务声明:
@POST
@Path("/uploadFile")
@Consumes(MediaType.APPLICATION_JSON)
public void uploadFile(Document document) {
LOGGER.info("upload document !");
}
以及包含相同属性的文档对象:
public class Document {
private byte[] datas;
private String name;
private String type;
public byte[] getDatas() {
return datas;
}
public void setDatas(byte[] datas) {
this.datas = datas;
}
...
如果我对“ctrl.doc=document在我的控制器(字节部分)中,服务正常工作
我错过了什么?我真的能用这种方式发送文件吗
共 (0) 个答案