2015-01-15 70 views
0

您好我有問題,我需要給我我的控制器上接收到請求響應消息轉換

比方說

class Response{ 
long id; 
String type 
} 

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

我在這裏的問題是,我的反應類型可以是HTML或JSON,默認是JSON。通過添加@RequestBody註釋,我可以將Response對象轉換爲JSON。

但現在我需要根據響應中的類型將響應轉換爲HTML或JSON。

如果(Response.type.equals( 「HTML」))返回的HTML內容(我有一個可以解析響應objecct一個jsp) 其他 返回JSON響應

我新的Spring MVC和我在我的情況下,不能使用路徑擴展和參數format = json。因爲內容類型基本上取決於我發送的數據。

我沒有得到任何線索有一個入口點,並在這種情況下有多種格式類型。我真的不想在我的控制器中使用多個處理程序。

有人可以幫助我。

+0

我無法得到任何方式使用消息轉換爲HTML和JSON – Ysak 2015-01-16 07:18:26

回答

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

請閱讀我的要求 – Ysak 2015-01-15 16:52:50

0

有幾個方法可以做到這一點,但我認爲最快捷的方式可能是隻返回要用於View對象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

我實際上正在尋找與自定義視圖解析器的方式..我不想m我的控制器返回視圖..這將使我的組織更醜陋.. – Ysak 2015-01-16 02:28:58

+0

我有很多控制器......並且如果條件或控制器中的開關看起來很奇怪 – Ysak 2015-01-16 02:30:07

+0

根據控制器中的條件返回視圖沒有任何問題,那就是點的控制器。但是,如果您確實需要在多個地方使用此功能,那麼自定義視圖解析器可能是您最好的選擇。我只是不確定如何從視圖解析器中訪問模型對象。 – Jberg 2015-01-16 15:38:36