2011-03-20 12 views
6

Şu anda sadece REST hizmetleri için bahar MVC'si uyguladığımız bir web uygulamasına sahibim.Bahar MVC dağıtıcısı, URL yolu bir yol olduğu zaman düzgün çalışmasını sağlayamıyor

eşleşme Bahar MVC Dispatcher'ın' adıyla DispatcherServlet içinde URI [/ myapp/dinlenme/testSvc/ileti] ile HTTP isteğinin bulundu: Bunu ayarlamak zaman biz aldığımız ancak bizim dinlenme hizmetleri ${contextPath}/rest/** görüntülenmesini istediğiniz Servlet'

Benim web.xml vardır: gayet

<servlet> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring/servlet-context.xml 
    </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> 
    <url-pattern>/rest</url-pattern> 
</servlet-mapping> 

servlet-context.xml ve bunlar başlangıçta kayıtlı olsun gibi hizmetler kaydediyor. aşağıdaki gibi

<context:component-scan base-package="com.mycompany.myapp.rest" /> 
<mvc:annotation-driven /> 

Benim denetleyicisi arar:

@Controller 
@RequestMapping(value = "/rest/testService") 
public class TestREST { 
    @RequestMapping(value="message", method=RequestMethod.GET) 
    public @ResponseBody String getMessage() { 
     return "REST working"; 
    } 

ben web.xml içinde url-pattern cahnge Eğer üzere * .rest ve çalışır messagemessage.rest için talebim haritalaması.

+0

'/ rest *' ı denediniz mi? –

+0

Bunun gibi bir şey olabileceğini düşündüm, ancak ne yazık ki durum böyle değil, sunucu gerçekte istekleri alıyor, bu yüzden günlüğe kaydediliyor, ancak doğru bir şekilde uymuyor. –

cevap

25

Sorun, web.xml ve @RequestMapping numaralı /rest önekini yinelemeniz olasıdır. Birinde veya her ikisinde de olmalıdır, ancak ikisi de değil, örn.

<url-pattern>/rest</url-pattern> 

ve

@RequestMapping(value = "/testService") 

@RequestMapping faaliyet gösterdiği üzerine yolları servlet bölümünü takip yolun parçalarıdır ve sizin web.xml yüzden ne olursa karşı @RequestMapping maç bırakılır, /path olarak servlet parçasını tanımlar /testService.

Geçerli biçiminde, @RequestMapping aslında {contextPath}/rest/rest/testService karşı eşleşiyor.

+3

Şerefe arkadaşlarım, bunu denedim ama işe yaramadı, sorun neden "/rest" vardı, '/ rest/* olarak değiştirildi ve şimdi iyi çalışıyor. Yani ikisinin kombinasyonu benimle dalga geçiyordu. Teşekkürler yığınları. –

+0

Bu konuda dokümantasyonda herhangi bir kaynak var mı? – dhblah

7

Belki de <url-pattern>/rest/*</url-pattern> veya <url-pattern>/rest*</url-pattern> olarak değiştirmeyi deneyebilir ve bunun yardımcı olup olmadığını görebilirsiniz.

+0

Ne yazık ki bu da işe yaramıyor. Despatcher'ın, hatayı günlüğe kaydettirirken isteği aldığını söyleyebilirim. İsteği almamış olsaydı, bu doğru olmaz mıydı?/rest */rest/* yaparsa, sunucuya geçmez. –

+1

Skaffman'ın cevabı ile birlikte/rest/* 'nin gerekli olduğunu söylediğinizde, bunun için size oy verdim, teşekkürler dostum. –

İlgili konular