2012-11-19 5 views
0

Ajax와 JSON을 사용하여 컨트롤러에 데이터를 전달하려고합니다.Spring MVC - JSON 배열 역 직렬화

HTML 테이블이 있는데 컨트롤러에 여러 테이블 좌표를 보내야합니다. 나는이처럼 직렬화,

{ 
    DAY: someIndex, 
    HOUR: someOtherIndex 
} 

이 배열 coordinates 호출 할 수 있습니다 : : 그래서 이러한 종류의 익명 객체를 포함한 자바 스크립트 배열을 만든 그럼 아약스 호출

JSON.stringify(coordinates) 

을 (type: POST를) 나는 data: JSON.stringify(coordinates)을 사용했다. 내 문서에서

준비 내가 사용 :

$.ajaxSetup({ 
    headers : { 
     Accept : "application/json; charset=utf-8" 
    } 
}); 

그리고 내 컨트롤러는 다음과 같습니다

@RequestMapping(value = "/{id}", method = RequestMethod.POST) 
public @ResponseBody 
String update(@PathVariable int id, @RequestBody String coordinates, HttpServletResponse response) { 

    // Do something here to convert it in my complex structure 

} 

그러나 나는 유형이 매개 변수 coordinates이 될해야하는지 모른다.

나는 GSON을 사용하고 있습니다. 그리고 저는 그것을 쉽게 비 직렬화 할 수 없었습니다. this 솔루션을 사용해 보았지만 작동하지 않습니다. (어떤 이유로 캐스트 유형을 묻지 않습니다.)

이 코드를 올바르게 deserialize 할 수 없을 것이라고 생각했기 때문에 좌표를 다른 형식으로 직렬화하려고했습니다. 토큰에 의해 분할 (;) here

그래서 내 배열 자바 스크립트 객체는 foreach에서 다음과 같이 생성됩니다

coordinates.push(someIndex.toString() + ";" + someOtherIndex.toString()); 

그리고 나는 캐릭터 라인 화 부분을 유지

을 이제 갔지. n POST 내 컨트롤러에 데이터를 입력하면 System.out.println(coordinates) 값이 출력되고 이상하게 보입니다. 자바 스크립트 콘솔에서이 개체에 대한

%5B%220%3B8%22%5D= 

: ["0;8"].

그래서 내 질문 :

  1. 이 좋은 방법인가?
  2. JSON 배열을 일부 Java 유형으로 deserialize 할 수 있습니까? 예 : List<Coordinate>? (나는이 컨트롤러를 컨트롤러에서 String 대신 사용하려고 시도했지만 오류가 발생했습니다.)
  3. String 접근 방식을 사용하고 있다면, 내가 원하는 것을 그 횡설수설을 번역 할 수있는 방법이 있습니까?

답변

1

서버 측에서는 %5B%220%3B8%22%5D=이 나오므로 기본적으로 jQuery는 데이터를 쿼리 문자열로 직렬화합니다.

contentType jQuery 옵션을 사용하여 요청의 콘텐츠 유형을 application/json으로 설정해야합니다.

그러면 좀 더 간단한 RequestBody 변환을 위해 GsonHttpMessageConverter의 구현을 살펴볼 수 있습니다. 여기 one이고, spring for android에있는 코드가있는 것 같습니다. 아마도 그 코드를 사용할 수 있습니다.

+0

실제로 contentType이 그랬습니다! 감사. 누군가 내 다른 질문에 답할 수 있도록 질문을 열어 두겠습니다. +1. – Pacane

+0

@ Pacane 잘, 귀하의 질문 번호 1 권유 의견, 2에 대한 위에서 언급 한 변환기가 필요없고 3 단지 콘텐츠 유형을 설정하여 해결있어;) – soulcheck

+0

오른쪽. 감사!! – Pacane