2012-10-20 2 views
0

내 아약스 응답에서 JSON 결과를 반환하고 싶습니다.jackson json 변환에 사용할 좋은 데이터 구조는 무엇입니까?

저는 스프링 mvc를 사용하고 있습니다. 이미 pom.xml에 jackson이 있습니다.

지금 내 컨트롤러의 행동에 내가 가진 : 당신은 그때 잭슨을 사용하여 JSON으로 변환 할 수 있습니다 내가 그렇게 사용하는 것이 좋습니다 않습니다/자바 자료 구조의 유형을 내장 무엇

@ResponseBody 
    @RequestMapping(value = "/someAjaxResponse", method = RequestMethod.POST) 
    public String someAjaxResponse(HttpServletRequest request, HttpServletResponse response) { 

    } 

?

각 응답 유형에 대해 새로운 클래스를 생성하고 싶지 않으므로이 목적을 위해 좋은 범용 자바 유형을 찾고 있습니다.

제안 사항?

json으로 변환하는 경우 가장 좋은 방법은 jackson이 ObjectMapper와 같은 여러 가지 방법으로 객체를 변환한다는 것입니다. 전체 애플리케이션에서 단일 인스턴스를 만들고 재사용한다고 생각하십니까? 그럼 내가 최종이라고 표시한다는 의미입니까?

답변

2

답변은 사용 사례에 따라 다릅니다. 나의 제안은 잭슨이 당신을 위해 serializaion을 처리하도록 한 후, 정확히 필요에 맞게 사용자 정의 값 객체를 생성하여 반환하고 있다는 것입니다 :

@ResponseBody 
@RequestMapping(value = "/someAjaxResponse", method = RequestMethod.POST) 
public CustomValueObject someAjaxResponse(HttpServletRequest request, HttpServletResponse response) { 

} 

당신이해야 할 그 모두에 <mvc:annotation-driven /> 또는 @EnableWebMvc를 추가하는 것입니다 응용 프로그램 컨텍스트에서 클래스 경로에 Jackson 종속성을 추가하면 @ResponseBody 주석을 사용하기 때문에 객체가 자동으로 JSON에 직렬화됩니다.

는 봄 참조 설명서에서 MappingJacksonHttpMessageConverter에 대해 자세히 알아보기 :

참고 반환 된 객체는 복잡한 구조를 가질 수있다. 클라이언트에 개인 데이터를 제공하고 싶다고 상상, 당신은 당신의 컨트롤러 방법에서 Person 객체를 반환 할 수 있습니다

에 직렬화 할 수
public class Person { 
    public String getFirstName() {...} 
    public int getAge() {...} 
    List<String> getEmailAddresses() {...} 
    Address getAddress() {...} 
} 

public class Address { 
    public String getStreet() {...} 
    public int getHouseNumber() {...} 
    public String getCity() {...} 
    public int getZIP() {...} 
    public String getState() {...} 
} 

: 나는 돌아가려면 무엇

{ 
    "firstName": "John", 
    "lastName": "Doe", 
    "age": 42, 
    "emailAddresses": [ 
     "[email protected]", 
     "[email protected]" 
    ], 
    "address": { 
     "street": "First Avenue", 
     "houseNumber": 123, 
     "city": "Smallville", 
     "ZIP": 12345, 
     "state": "CA" 
    } 
} 
+0

문자열, 나는 반환 값이 String이기 때문에 json으로 변환하지 않는 것이 현명하다고 생각하십니까? 즉, ResponseBody 및 String을 반환 유형으로 지정하고 Jackson이 참여하는 것을 원하지 않습니다. – Blankman

+0

Spring이 Person 객체를 JSON 데이터로 직렬화 한 다음 응답 본문에 쓰면 HTTP 클라이언트에 String으로 사용할 수 있습니다 (accept 요청 헤더의 일부로'application/json'을 추가 한 경우) . – matsev

+0

나는 스프링이 헤더를보고 json을 반환하는 것을 알고 있다고 생각하니? – Blankman

관련 문제