2014-01-08 45 views
1

我有一個簡單的Web服務,如下圖所示:春天web服務回報獲得附加到URL的

@RequestMapping(value="/api") 
@Controller 
public class TestController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String hello() { 
     System.out.println("this test is done "); 
     return "this is test url"; 
    } 
} 

我的web.xml文件中是這樣

<servlet-name>pa</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>pa</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <welcome-file-list> 
    <welcome-file>/index.html</welcome-file> 
    </welcome-file-list> 

現在whern我打這個網址:http://localhost:8556/pa/api 它顯示了一些這樣的事情

HTTP Status 404 - /pa/this is test url 

type Status report 

message /pa/this is test url 

description The requested resource (/pa/this is test url) is not available. 
Apache Tomcat/7.0.27 

ie。返回字符串被附加到url。

這裏是我的spring_context.xml

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer" /> 
    <property name="targetMethod" value="initLogging" /> 
    <property name="arguments"> 
     <list> 
      <value>classpath:logger/log4j.properties</value> 
      <!-- log4j.refresh.interval --> 
      <value>5000</value> 
     </list> 
    </property> 
</bean> 

不只是答案,你可以請給我解釋一下什麼是容器內happning,爲什麼它happning。 告訴我是否需要任何東西。 Thanx。

回答

1

我得到了爲什麼它happning ... 它是這樣的:

的事情是,

All controllers in the Spring Web MVC framework return a ModelAndView instance. 
Views in Spring are addressed by a view name and are resolved by a view resolver. 

使以往任何時候返回什麼,作爲一個視圖,因此附加到URL 來解決這個我使用@ResponceBody,如下

@RequestMapping(value="/api") 
@Controller 
public class TestController { 
    @RequestMapping(method = RequestMethod.GET) 
    public @ResponceBody String hello() { 
     System.out.println("this test is done "); 
     return "this is test url"; 
    } 
} 

現在什麼@ResponceBody做
它表示HTTP消息轉換機制應接管並返回的對象轉換成任何形式的客戶的需求。這將告訴Spring查看HTTP Accept頭並選擇合適的轉換器。如果我們提供帶有application/json值的Accept頭,那麼將調用JSON MappingJacksonHttpMessageConverter轉換器。

如需更多信息,請告訴我。

+0

你對我給你的答案不滿意嗎?您的第一個報價不適用於您的情況。您既不返回'ModelAndView',也不適用於Spring 3+。 –

+0

@SotiriosDelimanolis ...你告訴我容器的工作原理,它爲什麼用參數附加返回值,但你沒有告訴我解決方案。 但後來我真正appriciate你的答案... 謝謝。 –

+0

解決方案是什麼?你的問題沒有說明如何實現不同的行爲。 –

0

Spring MVC documentation解釋了這個在Supported method return types

以下是所支持的返回類型:

[...]

被解釋爲邏輯
  • 的字符串值視圖名稱, 模型通過命令對象隱式確定, @ModelAttribute註釋參考數據訪問器方法。

你的方法返回一個String,所以因此它的值被解釋爲一個視圖名。您可能已在您的環境中聲明InternalResourceViewResolver,該環境採用視圖名稱並嘗試解析InternalResourceView。這是通過使用HttpServletRequest#getRequestDispatcher()以及視圖名稱(根據配置前綴和後綴)完成的。

閱讀文檔on resolving views.

+0

sotitios我還沒有使用任何視圖解析器,我會把它的代碼也。 –

+0

@MayurGupta把你的完整背景。 –