2010-06-25 58 views
1

自定義視圖:Spring MVC的AJAX和JSON使用自定義視圖解析器,以及自定義視圖

public class MyView extends AbstractView { 
    .... awesome stuff ... 
} 

控制器:

@RequestMapping(value="mylocation") 
public ModelAndView dosomething() { 
... 
    modelAndView.setView(new MyView()); 
    return modelAndView; 
} 

出於某種原因,這也不行。唯一的視圖解析器我有以下內容:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
      p:prefix="/WEB-INF/jsp/" 
      p:suffix=".jsp" > 
     <property name="exposedContextBeanNames"> 
      <list> 
       <value>spEnv</value> 
      </list> 
     </property> 
    </bean> 

此代碼不起作用,因爲它試圖創建一些JSP視圖基於...我不確定,我提交表單的路徑;並有明顯沒有爲它的JSP的看法,我很期待JSON進行實際返回,但由於某種原因,這是行不通的,它只是嘗試轉發我的一些JSP,所以我猜,我需要指定如何處理這個在我的XML ...但我已經看到了人們迴歸JSON約1000種不同的方式,和所有的人都非常困惑,我,我只是在尋找最簡單的方法,這樣我就可以把它從有

編輯:我添加了一個好的開始的答案,但它允許你在任何URL後鍵入「.json」,如果作爲控制器我不期待它,它會做一些非常糟糕的事情,所以我需要以某種方式有這個視圖解析器僅適用於固定的URL

回答

0

好了,終於想一百萬的組合

@RequestMapping(value = "/test/data") 
    public TestFormData dostuff() { 
     TestFormData data = new TestFormData(); 
     data.setName("myname"); 
     return data; 
    } 

,然後這個

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1"> 
     <property name="mediaTypes"> 
      <map> 
       <entry key="json" value="application/json"/> 
      </map> 
     </property> 
     <property name="defaultViews"> 
      <list> 
       <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
      </list> 
     </property> 
    </bean> 

我真的不明白我怎麼可以返回從這裏對象...

但其實這雖然簡單,但非常有用的是不能接受的因爲那時我去我的網站的其他頁面,而只是把一個任意「以.json」鏈接後,它拋出一個異常,讓我的應用程序的用戶太多的信息,所以基本上我需要找出一個辦法只能在某些安全的控制器上擁有這種能力......

什麼想法?