2010-01-10 80 views
1

我已經鞭撻了互聯網尋找一個可以同時使用spring-json和註釋控制器的例子,我是新來的春天,所以我沒有運氣調整spring- json的示例(它使用SimpleController等)使用帶註釋的控制器的spring-json幫助

目前我有一個控制器有2個映射,一個列表結果在HTML(和工程),另一個應該呈現json的一些Ajax調用,但是當我訪問它的url返回一個404並請求/myapp/jsp/jsonView.jsp。 show方法上的代碼會執行,它甚至會驗證id參數的存在,所以看起來問題是它不知道如何渲染,據我所知,這是viewResolver bean的功能。

預先感謝任何幫助:)

下面是我得到了什麼:

@Controller 
public class ItemController { 

//This one works 
@RequestMapping(value = "/items", method = RequestMethod.GET) 
public ModelMap list() { 
    ModelMap map = new ModelMap(); 
    map.addAttribute("item", "value"); 
    return map; 
} 
//This one returns 404, asks for jsonView.jsp 
@RequestMapping(value = "/items.json", method = RequestMethod.GET) 
public ModelAndView show(@RequestParam(value = "id", required = true) String id) { 
    Map model = new HashMap(); 
    model.put("firstname", "Peter"); 
    model.put("secondname", "Schmitt"); 
    return new ModelAndView("jsonView", model); 
    } 
} 

上的myapp-servlet.xml中:

<bean name="viewResolver" class="org.springframework.web.servlet.view.XmlViewResolver"/> 

上views.xml:

<beans> 
<bean name="jsonView" class="org.springframework.web.servlet.view.json.JsonView"> 
    <property name="encoding"> 
     <value>UTF-8</value> 
    </property> 
    <property name="contentType"> 
     <value>application/json</value> 
    </property> 
    <property name="jsonWriter"> 
     <ref bean="sojoJsonWriter"/> 
    </property> 
    <property name="jsonErrors"> 
     <list> 
      <ref bean="statusError"/> 
      <ref bean="modelflagError"/> 
     </list> 
    </property> 
</bean> 

<bean name="sojoJsonWriter" class="org.springframework.web.servlet.view.json.writer.sojo.SojoJsonStringWriter"> 
    <property name="convertAllMapValues"> 
     <value>true</value> 
    </property> 
</bean> 

<bean name="statusError" class="org.springframework.web.servlet.view.json.error.HttpStatusError"> 
    <property name="errorCode"> 
     <value>311</value> 
    </property> 
</bean> 
<bean name="modelflagError" class="org.springframework.web.servlet.view.json.error.ModelFlagError"> 
    <property name="name"> 
     <value>failure</value> 
    </property> 
    <property name="value"> 
     <value>true</value> 
    </property> 
</bean> 

的web.xml:

<servlet> 
<servlet-name>myapp</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>myapp</servlet-name> 
<url-pattern>/myapp/*</url-pattern> 
</servlet-mapping> 

回答

1

的問題是與在servlet.xml中的視圖解析器,添加AP:​​爲了屬性,以便將之前的InternalResourceViewResolver

<bean name="viewResolver" class="org.springframework.web.servlet.view.XmlViewResolver" p:order="1"/> 
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/"p:suffix=".jsp" p:order="10"/> 
2

有可能是另一種選擇:你能夠升級到春天3(它現在已經釋放狀態)?有一個非常棒的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"/> 
... 
 

如果現在附加以.json到您的URL路徑或使用相應的 '接受' HTTP標頭,傳遞的對象(見model.put(...))相應序列。對於json spring 3默認使用jackson

+0

我也認爲這是加載,但已經有應用程序的重要組成部分開發它有0個測試,不能遷移那個舊部分:( – albemuth 2010-01-11 04:04:39