2010-06-28 1 views
1

저는 json으로 데이터를 처리하는 스프링 컨트롤러 (MyController)가 있습니다.다른베이스를 가진 동일한 스프링 컨트롤러의 인스턴스 두 개를 생성하는 방법 @requestMapping

구성을 약간 변경하면 동일한 컨트롤러를 다시 사용할 수 있고 동일한 데이터를 제공 할 수 있지만 json이 아닌 xml과 같은 데이터를 제공 할 수 있습니다.

myControllerInstanceA를 만들고 기본 URL로/json을 사용하도록 구성한 다음 myControllerInstanceB를 만들고 기본 URL로/xml을 사용할 수 있기를 바랍니다.

내가 할 수있는 유일한 방법은 MyController를 서브 클래스 화하고 서브 클래스의 @requestMapping을/xml로 설정하는 것이다. 차라리 springap-servlet.xml에서 일부 구성을 수행하여 동일한 효과를 얻을 수 있습니다.

이것이 가능합니까?

나는 이것을 읽고있는 봄 마법사가 "왜 도대체 그 일을하고 싶어하는지"생각할 것 같네요. 그래서 저는 지금 사용하고있는 테크닉을 설명 할 것입니다 : ModelAndView에 간단한 자바 빈을 추가하는 컨트롤러를 만들고 있습니다. 컨트롤러는 또한 뷰를 광고합니다. 뷰는 자바 빈을 받아서 컨트롤러가 어떻게 구성되었는지에 따라 json이나 xml로 직렬화한다. 아마 Spring-ish 방법을 사용하는 것이 더 좋을 것이라고 생각합니다. 그러나이 접근법은 간단하고 직설적이었습니다. 또한, Spring이 사용하도록 설정된 것보다는 익숙한 JSON 라이브러리로 작업 할 수 있습니다. 나에게 스프링 방법을 알려주는 누군가를위한 포인트 - json 또는 xml과 같은 데이터를 쉽게 제공하는 방법, 컨트롤러 코드를 가능한 많이 재사용하는 방법.

답변

1

ContentNegotiatingViewResolver을 사용하여보기를 해결하십시오. 이 해결 방법은 다른 구성보기를 사용하여 요청의 Accepts Header 또는 Extension을 기반으로 모델을 렌더링합니다. 기본적으로 JSON 용 MappingJacksonJsonView를 사용하므로 MarshallingView와 함께 사용할 XML 마샬 러를 구성해야합니다.

이 구성을 사용하면 각 주석 메소드가 무한 데이터 형식을 지원할 수 있습니다.

체크 아웃 example.

1

이 요구하고 있는지 확실하지 않습니다 만, 봄 (3)는 JSON 또는 XML을 반환하는 데 도움이 될 수 있습니다 ContentNegotiationResolver 있습니다

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="xml" value="application/xml"/> 
      <entry key="json" value="application/json"/> 
     </map> 
    </property> 
</bean> 

그리고 컨트롤러에 당신은에 JSON과 XML을 매핑 할 수 있습니다 같은 컨트롤러 방법.

@Controller 
class MyClass(){ 
    @RequestMapping(value={"/yourURL.json", "/yourURL.xml"}) 
    public Object yourController(){ 
     return Object 
    } 
} 
+0

고마워요! 매우 감사. – morgancodes

관련 문제