나는 데이터베이스를 쿼리 나머지 서비스 다음 한는 HashMap을 포함에 응답을 얻을, 여러 "채팅"-objects 구성하고 배열로를 반환REST 개체
@GET
@Path("/getChats")
@Produces(MediaType.APPLICATION_JSON)
public Chat[] getChats(@QueryParam("userId") String userId){
ArrayList<Chat> chats = getChatsDB(userId);
Chat[] chatAr = new Chat[chats.size()];
return chats.toArray(chatAr);
}
- 클래스가있다 "채팅" POJO :이 채팅 객체를 얻기위한 클라이언트 코드는
import java.util.HashMap;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public class Chat {
private String userId1;
private String userId2;
private HashMap<String, String> msgs;
public Chat() {
msgs = new HashMap<>();
}
public String getUserId1() {
return userId1;
}
public void setUserId1(String userId1) {
this.userId1 = userId1;
}
public String getUserId2() {
return userId2;
}
public void setUserId2(String userId2) {
this.userId2 = userId2;
}
public void addMsg(String date, String msg){
msgs.put(date, msg);
}
public HashMap<String, String> getMsgs() {
return msgs;
}
}
입니다
: 이public static Chat[] getChats() {
Chat[] chats = null;
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
String chatUrl = url+"getChats?userId="+user.getId();
chats = restTemplate.getForObject(chatUrl, Chat[].class);
for(Chat c: chats){
System.out.println(c.getUserId1());
System.out.println(c.getUserId2());
for(Map.Entry<String,String> e : c.getMsgs().entrySet()){
System.out.println(e.getKey() + e.getValue());
}
}
return chats;
클라이언트가를 받으면에 채팅 개체,하지만 HashMap없이 메시지. c.getUserId1 및 c.getUserId2는 올바른 값을 반환하지만 HashMap은 비어 있습니다. 이 문제는 클라이언트 측에서만 발생합니다. servicemethod getChats (@QueryParam ("userId") String userId)의 chat-objects는 HashMap에 올바른 값을 가지고 있습니다.
이[{ "USERID1": "414", "USERID2": "12"}]
위대한 메시지로 유효한 json 파일을 생성합니다. 그러나 클라이언트는 예외를 던졌습니다 : org.springframework.http.converter.HttpMessageNotReadableException : JSON을 읽을 수 없습니다 : START_ARRAY 토큰 에서 java.lang.String의 인스턴스를 deserialize 할 수 없습니다 [출처 : com.android.tools.profiler .support.network.HttpTracker $ InputStreamTracker @ 69c117a; 라인 : 1, 컬럼 : 11] (참조 체인을 통해 : Chat [ "msgs"]); 중첩 예외는 com.fasterxml.jackson.databind.JsonMappingException입니다 : START_ARRAY 토큰 '에서 java.lang.String 인스턴스를 deserialize 할 수 없습니다. – cyden
@cyden 업데이트 된 json을 표시 할 수 있습니까? – varren
https://api.myjson.com/bins/13ppkr – cyden