array values in json Can not deserialize instance of java.lang.String out of START_ARRAY token

자바 프로그램을 오랫동안 해 왔지만 Jquery 와 Json 등을 섞어서 써 본적이 없다. 거기에다가 그냥 String value을 집어 넣어서 데이타베이스를 Upate할 경우는 문제가 전혀 없었다.

하지만  byte array인 이미지 스트링을 밸류로써 쓰니 갑자기 “Can not deserialize instance of java.lang.String out of START_ARRAY token” 의 에러가 발생하였다.

인터넷을 몇시간 뒤져도 쓸만한 답이 없다가 결국에는 내가 아는 방식대로 유추해서 써 보았다.




그랬더니 왠걸 바로 작동하기 시작했다..

아래는 샘플로 만들어 본 …

처음에는 바로 밑의 있는 데로 했지만… 안된다. 같은 Byte Array 인데도 신경질 나게 하 하

public byte[] getSign() {
return sign;
}
public void setSign(byte[] sign) {
this.sign = sign;
}

private String barcode;

 

그래서 바로 밑에 보니는 코드처럼  무식하게 List of  String으로 바꾸어 주었다 ..

private List <String> signString;
public List <String> getSignString() {
return signString;
}

물론 나중에 다시 바이트로 바꾸어 데이타베이스에는 Blob으로 저장을 해주었지만. 일반 자바코드로 하면 간단한데. 하하

 

다음은 리소스 클래스다.

@PUT @Path(“{update}”)
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
//@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Signature update(Signature sig) {
System.out.println(“Updating Signature: ” + sig.getCustomerid());
dao.update(sig);
return sig;
}

 

믈론 그다음은 자바스트립트..

signature.signString=data;
console.log(“sign== ” + signature.signString);
//updateSignature($rootScope,$scope,signature,CashSignature.getSign().customerid);
signature.$update({ customerid: signature.customerid});

 

그리고 자바스크립트 서비스…

angular.module(‘ㅌㅌㅌ.services.signature’, [‘ngResource’]).
factory(‘Signature’, function($resource){
return $resource(‘api/signature/:rewardcardId’, {}, {
query: {method:’GET’, params:{rewardcardId:’signature’}, isArray:false},
update: {method:’PUT’, params:{rewardcardId:’signature’}, isArray:false}
});
});

You may also like...

댓글 남기기