[SPRING] Spring Web Service의 START_ARRAY 토큰에서 객체의 인스턴스를 deserialize 할 수 없다.
SPRINGSpring Web Service의 START_ARRAY 토큰에서 객체의 인스턴스를 deserialize 할 수 없다.
현재 안드로이드에서 내 웹 서비스에 연결하는 데 문제가 있습니다. 나는 jackson-core / databind / annotation-2.2.4와 Spring RESTWebService를 사용한다. 브라우저에서 URL에 액세스하면 JSON 응답을 볼 수 있습니다. (서버 반환 List \ Shop \ like :)
[{"name":"shopqwe","mobiles":[],"address":{"town":"city",
"street":"streetqwe","streetNumber":"59","cordX":2.229997,"cordY":1.002539},
"shoe" [{"shoeName":"addidas","number":"631744030","producent":"nike","price":999.0,
"sizes":[30.0,35.0,38.0]}]
클라이언트 끝점 (Android 응용 프로그램)에서이 오류 메시지가 나타납니다.
08-26 17:43:07.406: E/AllShopsAsyc(28203): Could not read JSON: Can not deserialize
instance of com.auginzynier.data.ShopContainer out of START_ARRAY token
08-26 17:43:07.406: E/AllShopsAsyc(28203): at [Source:
com.android.okhttp.internal.http.HttpTransport$ChunkedInputStream@41efbd48; line: 1,
column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException:
Can not deserialize instance of com.auginzynier.data.ShopContainer out of START_ARRAY
token
08-26 17:43:07.406: E/AllShopsAsyc(28203): at [Source:
com.android.okhttp.internal.http.HttpTransport$ChunkedInputStream@41efbd48; line: 1,
column: 1]
08-26 17:43:07.406: E/AllShopsAsyc(28203):
org.springframework.http.converter.HttpMessageNotReadableException: Could not read
JSON: Can not deserialize instance of com.auginzynier.data.ShopContainer out of
START_ARRAY token
내 서버 요청
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ShopContainer response = restTemplate.getForObject(url, ShopContainer.class);
ShopContainer는 다음과 같습니다.
public class ShopContainer {
private List<Shop> shops;
상점, 주소 및 신발 구조 : (getter 및 setter가 생략되었습니다) :
public class Shop {
@JsonProperty("name") private String name;
@JsonProperty("mobiles") private List<String> mobiles = new ArrayList<String>();
@JsonProperty("address") private Address address;
@JsonProperty("shoe") private List<Shoe> shoe = new ArrayList<Shoe>();
public class Address {
@JsonProperty("town") private String town;
@JsonProperty("street") private String street;
@JsonProperty("streetNumber") private String streetNumber;
@JsonProperty("cordX") private Double cordX;
@JsonProperty("cordY") private Double cordY;
public class Shoe {
@JsonProperty("shoeName") private String shoeName;
@JsonProperty("number") private String number;
@JsonProperty("producent") private String producent;
@JsonProperty("price") private Double price;
@JsonProperty("sizes") private List<Double> sizes = new ArrayList<Double>();
나는 여기에서 그리고 구글에서 보았지만, 아직도 내가 무엇을 놓치고 있는지 알 수 없다.
어떤 응답이라도 크게 도움이 될 것입니다.
문안 인사.
@최신 정보
잭슨의 ObjectMapper와 RequestMethod.GET을 사용하여 JSON을 수정했습니다. 이제 문자열을 반환합니다.
list is List<Shop>
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("D:\\Android\\shop.json"), list);
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list));
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list);
콘솔의 JSON은 다음과 같습니다.
[ {
"name" : "shopqwe",
"mobiles" : [ ],
"address" : {
"town" : "city",
"street" : "streetqwe",
"streetNumber" : "59",
"cordX" : 2.229997,
"cordY" : 2.002539
},
"shoe" : [ {
"shoeName" : "addidas",
"number" : "631744033",
"producent" : "nike",
"price" : 10.0,
"sizes" : [ 30.0, 35.0, 38.0 ]
} ]
} ]
요청이 여전히 작동하지 않습니다 - 오류가 동일합니다.
해결법
-
==============================
1.귀하의 json 배열이 포함되어 있지만 개체로 구문 분석하려고합니다. 개체는 {로 시작해야하기 때문에이 오류가 발생합니다.
귀하의 json 배열이 포함되어 있지만 개체로 구문 분석하려고합니다. 개체는 {로 시작해야하기 때문에이 오류가 발생합니다.
다음 두 가지 옵션이 있습니다.
-
==============================
2.당연히 당신이 게시 한 JSON이 브라우저에서보고있는 것을 당연한 것으로 생각하면 문제는 JSON 자체입니다.
당연히 당신이 게시 한 JSON이 브라우저에서보고있는 것을 당연한 것으로 생각하면 문제는 JSON 자체입니다.
게시 한 JSON 스 니펫이 잘못되었습니다.
당신은 게시했습니다 :
[{ "name" : "shopqwe", "mobiles" : [], "address" : { "town" : "city", "street" : "streetqwe", "streetNumber" : "59", "cordX" : 2.229997, "cordY" : 1.002539 }, "shoe"[{ "shoeName" : "addidas", "number" : "631744030", "producent" : "nike", "price" : 999.0, "sizes" : [30.0, 35.0, 38.0] }]
올바른 JSON은 다음과 같습니다.
[{ "name" : "shopqwe", "mobiles" : [], "address" : { "town" : "city", "street" : "streetqwe", "streetNumber" : "59", "cordX" : 2.229997, "cordY" : 1.002539 }, "shoe" : [{ "shoeName" : "addidas", "number" : "631744030", "producent" : "nike", "price" : 999.0, "sizes" : [30.0, 35.0, 38.0] } ] } ]
from https://stackoverflow.com/questions/25510083/cannot-deserialize-instance-of-object-out-of-start-array-token-in-spring-webserv by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] '스프링 - 부트 스타터'항아리는 무엇입니까? (0) | 2019.01.14 |
---|---|
[SPRING] 스프링 부트의 장점 [닫힘] (0) | 2019.01.14 |
[SPRING] 두 개 이상의 데이터 소스를 사용할 때 Spring의 다중 Entity Manager 문제 (0) | 2019.01.14 |
[SPRING] 주석을 사용하여 시로 권한 부여 권한 검사가 작동하지 않습니다. (0) | 2019.01.14 |
[SPRING] @WebService 봄 인식 방법 (0) | 2019.01.14 |