2015-01-15 1 views
0

안녕 내가 내 컨트롤러에 수신 요청에 응답 할 필요가 어디 문제가이메시지 변환

날 여기에 대한 문제는 내 응답 유형이다

class Response{ 
long id; 
String type 
} 

@Controller 
class MyController{ 
@RequestMapping(value = "/getValue") 
public Response getValue(){ 
return Response; 
} 
} 

말할 수 있습니다 HTML 또는 JSON 일 수 있으며 기본값은 JSON입니다. @RequestBody annotation을 추가하여 Response 객체를 JSON으로 변환 할 수있었습니다.

하지만 응답의 유형에 따라 HTML 또는 JSON으로 변환해야합니다.

경우 (Response.type.equals ("HTML")) 반환 HTML 콘텐츠 내가 MVC 봄에 새로운 오전과 내가 다른 반환 JSON 응답

(I는 응답 objecct을 구문 분석 할 수있는 JSP가) 필자의 경우 format = json과 같은 경로 확장 및 매개 변수를 사용할 수 없습니다. 콘텐츠 유형은 기본적으로 보내는 데이터에 따라 달라 지므로

이 경우 단일 진입 점을 갖고 여러 형식 유형을 갖는 데 어떤 단서도 없습니다. 내 컨트롤러에는 여러 개의 핸들러가 필요 없다.

누군가 나를 도와 줄 수 있습니까?

+0

나는 html과 json으로 변환하는 메시지를 사용하는 어떤 방법도 얻을 수 없었다 – Ysak

답변

0

org.springframework.web.servlet.view.ContentNegotiatingViewResolver에 대해 읽어야합니다.

<bean 
 
\t \t class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
 
\t \t <property name="order" value="1" /> 
 
\t \t <property name="mediaTypes"> 
 
\t \t \t <map> 
 
\t \t \t \t <entry key="json" value="application/json" /> 
 
\t \t \t \t <entry key="xml" value="application/xml" /> 
 
\t \t \t </map> 
 
\t \t </property> 
 
\t \t <property name="defaultViews"> 
 
\t \t \t <list> 
 
\t \t \t \t <bean 
 
\t \t \t \t \t class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
 
\t \t \t \t <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
 
\t \t \t \t \t <property name="marshaller" ref="Jaxb2Marshaller"> 
 
\t \t \t \t \t </property> 
 
\t \t \t \t </bean> 
 
\t \t \t </list> 
 
\t \t </property> 
 
\t \t <property name="ignoreAcceptHeader" value="true" /> 
 
\t </bean>

+0

내 requirment를 읽어라 – Ysak

0

은 당신이 할 수있는 몇 가지 방법이 있습니다,하지만 난 가장 빠른 방법은 당신이 원하는보기 개체를 반환 아마 생각 : 여기

는 exemple 간다 Response.type 값입니다.

@Controller 
class MyController{ 
    @RequestMapping(value = "/getValue") 
    public View getValue(){ 

     if(Response.type == "json") 
      return new MappingJackson2JsonView(); 

     else if(Response.type == "xml") 
     return MarhallingView(); 

     else 
      return new InternalResourceView("/getValue.jsp"); 
    } 
} 

더 세련된 방법이 있습니다. 예를 들어 여러 개의보기 확인자를 구성하고 컨트롤러에보기 이름을 반환 할 수 있습니다. "getValue.json", "getValue.xml", "getValue.jsp"그런 다음보기 해석자가 확장명에 따라이를 파악하도록합니다.

또 다른 옵션은 Response.type 값을 확인하고 적절한보기를 반환하기 위해 사용자 지정보기 해결 프로그램을 작성하는 것입니다. 나는 그것을 직접하지 않았으므로 모범이 없지만 가능해야한다.

+0

나는 실제로 사용자 정의보기 해결 자로 길을 찾고있다. 나는 나의 컨트롤러가보기를 돌려 주길 원치 않는다. .. 그게 내 조직을 더 못생긴 것입니다 ... – Ysak

+0

나는 많은 컨트롤러를 가지고 ... 컨트롤러의 조건이나 스위치가 이상하게 보일 경우 – Ysak

+0

컨트롤러의 조건부를 기반으로 뷰를 반환해도 아무런 문제가 없습니다. 컨트롤러의 그러나 여러 위치에서이 작업이 필요한 경우 사용자 지정보기 해결 프로그램이 최선의 방법 일 수 있습니다. 뷰 리졸버 (view resolver) 내에서 모델 객체에 액세스하는 방법을 잘 모르겠습니다. – Jberg