2011-12-01 5 views
6

스프링 3.0으로 RESTful 웹 사이트를 만들고있다. ContentNegotiatingViewResolver과 HTTP 메시지 변환기 (JSON의 경우 MappingJacksonHttpMessageConverter, XML의 경우 MarshallingHttpMessageConverter 등)를 사용하고 있습니다. 마지막 URL에서 .xml 접미사를 사용하고 JSON의 경우 URL에서 .json 접미사를 사용하면 XML 콘텐츠를 성공적으로 가져올 수 있습니다.스프링 REST 컨트롤러에서 RequestBody가있는 XML/JSON POST

컨트롤러에서 XML/JSON 컨텐츠를 가져 오는 것이 어떤 문제도 일으키지 않습니다. 하지만 동일한 컨트롤러 메소드에서 요청 본문을 사용하여 XML/JSON을 POST 할 수 있습니까?

예 :

@RequestMapping(method=RequestMethod.POST, value="/addEmployee") 
    public ModelAndView addEmployee(@RequestBody Employee e) { 
     employeeDao.add(e); 
     return new ModelAndView(XML_VIEW_NAME, "object", e); 
} 

답변

11

JSON (또는 XML)을 반환하기 위해 뷰를 사용하지 말고 @ResponseBody 주석을 사용하는 것이 좋습니다. reply.I에 대한

@RequestMapping(method=RequestMethod.POST, value="/addEmployee") 
    @ResponseBody 
    public Employee addEmployee(@RequestBody Employee e) { 
    Employee created = employeeDao.add(e); 
    return created; 
    } 
+0

감사합니다 '직원이 반환되는 것입니다 경우이 같은 방법 정의 및 구현 (주 테스트되지 않음)를 사용하는 경우, 봄과 MappingJacksonHttpMessageConverter는 JSON로 직원 개체를 변환합니다 자동 이걸 다시 시도해 보자. :) –

+0

Stoffer, 나는 길을 시도했다. 당신은 대답했다. 하지만 whn 나는 모든 POST 요청을 요청한 몸체에서 컨트롤러 메소드로 XML/JSON 컨텐츠를 POST하려고했습니다. 나는 거기에서 예외 을 얻고있다 즉 ** HTTP 상태 400 - 콘텐츠 유형 '텍스트/일반; 문자셋 = UTF-8'** 난에 ContentNegotiatingViewResolver 및 의 HTTP 메시지 된 컨버터를 모두 사용하고 있기 때문에인가를 지원하지 않습니다 ?? 아니면 뒤에 다른 이유가 있습니다. –

+4

Spring의 변환기는 특정 내용 유형 (요청 본문 용) 및 승인 (응답 용)을 등록합니다. json의 경우'application/json'과 다른 것들이 있습니다. XML의 경우'application/xml'과 다른 것들입니다. 클라이언트가'content-type : application/json'과'accept : application/json'을 전송하는지 확인하십시오. –

관련 문제