2012-04-17 4 views
0

Krams에서 예제를 작성하십시오. 아래의 내용은 Person 객체가 제출 된 요청의 헤더를 기반으로 JSON 또는 XML로 변환 될까요?봄 MVC repsonsebody

@RequestMapping(value = "/person", 
      method = RequestMethod.POST, 
      headers="Accept=application/xml, application/json") 
public @ResponseBody Person addPerson(@RequestBody Person person) { 
    logger.debug("Provider has received request to add new person"); 

    // Call service to here 
    return personService.add(person); 
    } 

그래서 json으로 데이터를 제출하면 json이 다시 생기고 xml도 마찬가지입니다. 아니면 다른 일이 있습니까?

답변

2

Accept http 요청 헤더에 따라 다릅니다. 그것이 json이라면, json을 얻습니다. xml이면 xml을 얻습니다. 코드의이 부분은 말씀을 정확히

:

.... 
headers="Accept=application/xml, application/json") 
... 

당신은 하나 개의 MIME 유형을 보내고 문제없이 서로를받을 수 있습니다.

편집

모두 headersproduces/consumes 매개 변수는 /생산 requestmapping에 의해 소비 될 수있는 것을 말한다. 특정 직렬화를 강요하지 않습니다. 요청/응답 유형은 요청 헤더에서 전적으로 결정됩니다. 발송자가 요청 헤더와 일치하는 producesconsumes (또는 헤더)으로 매핑을 찾지 못하면 오류가 발생합니다.

+0

그리고 produce 및 consumes 매개 변수를 사용하여 XML을 소비하고 json을 생성하도록 지정할 수 있습니다 (똑똑한 아이디어는 아닐지라도). – NimChimpsky

+0

@NimChimpsky 네, 그게 좋은 생각입니다. – soulcheck

+0

@NimChimpsky'produce' 및'consumes'는 봄 mvc 3.1의 새로운 매개 변수입니다. 그들은 내용 유형 매칭에 사용될 때'headers' 매개 변수를 대체합니다. 따라서 스프링 3.1을 사용한다면'produce'와'consumes'를 사용해야합니다. – soulcheck

0

@RequestMapping의 '머리글', '생산'및 '소비'매개 변수는 퍼즐의 한 부분입니다. 프레임 워크가 수신 요청을 라우팅하고 헤더의 값에 따라 요청을 구별합니다.

이 퍼즐의 다른 부분은 응용 프로그램에서 구성되는 MessageConverters입니다. 이 예제의 컨트롤러 핸들러 메서드는 객체를 반환하고 프레임 워크는 객체를 텍스트 표현 (예 : XML 또는 JSON)으로 변환하는 방법을 알아야합니다. MessageConverters는 인바운드 측 (@RequestBody로 주석 된 매개 변수) 및 아웃 바운드 측 (메소드 반환 값이 @ResponseBody로 주석 된 경우)에서 사용됩니다. 적절한 MessageConverter는 들어오는 요청의 미디어 유형에 기반하여 프레임 워크에 의해 선택됩니다.

mvc : annotation-driven > 네임 스페이스를 Spring XML 구성 파일에 사용하거나 Java Config 클래스에서 @EnableMvc 주석을 사용하는 경우 JSON 및 XML을 지원하는 MessageConverters가 자동으로 구성됩니다.