2011-10-03 4 views
0

표준 Spring MVC 3x 프레임 워크를 사용하고 내 모델 엔티티를 모든 좋은 관계형 항목 (javax.persistence API)으로 구축했습니다. 내 DB와 통합되었습니다.JSON 객체와 Spring 모델 객체

응용 프로그램이 발전함에 따라 JSON 호출을 지원해야했습니다.

, 내 모델 엔티티 층에서 매핑 된 다양한 관계를 감안할 때 (classY-로 classX-> 고급뿐만 아니라> classX)

나는 가장 좋은 방법은에서 무엇 궁금 중복 된 재 참조없이 이러한 모델 클래스 중 일부를 적절한 JSON 객체로 변환합니까?

예 :

{"classX":{"id":"1", "classY":{"id":"2", "classX":{"id":"1", "classY":{"id":"2"... 

난에 대한 피드백을 상관 없어 방법론의 몇 가지를 고민하고 샘플 버그 응답 ...

  1. 은 기존 모델 클래스를 유지하고 상호 관계를 설정 NULL로 내 ModelMap에 넣기 전에 다시 참조하는 몇 가지 양식이되지 않습니다. (내 생각에 그것의 해킹)

    {"classX":{"id":"1", "classY":{"id":"2", "classX":null}}} 
    
  2. 재 참조 클래스가없는 기존 모델과 비슷한 JSON 클래스를 다시 작성하십시오 (그러나 재사용 할 수 없다는 것을 의미한다고 생각합니다 ... 원하는 경우 classX-> classY 만 거치지 않고 뒤로 거슬러 올라갈 것입니다.) 데이터 응답을 위해 다른 방법으로 드릴하십시오).

    {"jsonClassX": {"id":"1", "jsonClassY":{"id":"2"}}} 
    
  3. 모든 컨트롤러 호출에 대한 표준 ModelMap 매핑으로 구성하면됩니다. 재사용 가능한 JSON 클래스의 개념이 없으므로 컨트롤러가 반환 값을 구성하고 구성하는 방식에 따라 달라집니다. 이것은 가장 쉬운 것 같아하지만 (잘라 내기 및 붙여 넣기 외에) 더-재사용 가능한 코드를 의미합니다 ... 그래서

    {"x":{"id":"1", "y":{"id":"2"}}} // for controller call 1 
    {"y":{"id":"2", "x":{"id":"1"}}} // for controller call 2 
    

그 순간 내가 저글링하고있는 옵션은, 나는 않을 것 다른 사람들이 어떻게했는지에 대한 피드백과 약간의 조언을 얻는 마음.

+0

Jackson과 같은 제 3 자 라이브러리에서 직접 발생하거나 직접 번역 한 코드에서 발생합니까? – atrain

+0

안녕하세요 @AaronSheffey, 그냥 표준 설정 구성 파일 'public @ResponseBody Map ...' – alwinc

답변

0

json 마샬링을 관리하려면 Jackson을 사용해야합니다. 그런 다음 모델 객체에 주석을 추가하여 Jackson에 이러한 유형의 관계를 처리하는 방법을 알릴 수 있습니다. http://wiki.fasterxml.com/JacksonFeatureBiDirReferences은 이러한 관계를 설정하는 좋은 방법입니다.