2011-05-17 29 views
12

içinde görünümü çözemezse:Bahar benim servlet birine yeni bir yöntem/eşleme ekledim servlet

@RequestMapping(value = "/user/prefs/order", method = RequestMethod.POST) 
public void updateUsersPrefs(@RequestBody Map<String, ArrayList> body, HttpServletRequest request) { 
    ... 
} 

ama bu URL'ye bir istek gönderir zaman ile, bir 500 iç sunucu hatası olsun aşağıdaki hata iletisini alırsınız:

javax.servlet.ServletException: Could not resolve view with name 'user/prefs/order' in servlet with name 'appfinder' 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1029) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

Bunun neden bildirildiğini görmüyorum. Bu konuda yardımcı olan var mı? Sağlayabileceğim daha fazla bilgi var, lütfen bana bildirin.

Teşekkürler!

+2

, istenen görünüm adıyla bir dize dönüşü deneyin. Başka seçenekler var. – DwB

cevap

31

Yay davranır void dönüş türü @RequestMapping yöntem in the following manner:

void - yöntem, bu amaç için tip ServletResponse/HttpServletResponse bir bağımsız değişken ilan doğrudan cevap içerik yazarak (yanıtı kendisi işleme durumunda) veya görünüm adının bir örtülü olarak RequestToViewNameTranslator aracılığıyla belirlenmesi gerekiyorsa (işleyici yöntem imzasında yanıt argümanı bildirilmiyorsa).

nedenle bu yönteme hiçbir HttpServletResponse parametre olmadığından, Bahar sen Görünüm adı bir RequestToViewNameTranslator yoluyla belirlenecek istiyorum varsayar.

sonra the default implementation kicks in which will, sizin bağlamda kullanmak RequestToViewNameTranslator belirli belirtmezseniz:

basit bir görünüm adının içine gelen isteğin URI dönüştürür. Eğer istiyoruz

  1. Yapılandır davranışı ile özel RequestToViewNameTranslator: Eğer gelen isteğin URI görünümü adı olarak kullanılacak istemiyorsanız

, birkaç seçenek var

  • Görünüm çözünürlüğünün gerçekleşmesi yerine doğrudan yanıt yazmak istiyorsanız, bu yönteme HttpServletResponse parametresi ekleyin.
  • Bu yöntemin dönüş türünü, yöntem içinde görünüm veya görünüm adını belirleyebilmek için String, View, or ModelAndView` olarak değiştirin.
  • +2

    Küçük bir yazım hatası var: "Bu nedenle" HttpServletRequest "olmadığından" Olması gerekir "Bu nedenle" HttpServlet * Response * '" olmadığından –

    +0

    @Costi teşekkürler, sabit –

    +0

    Bu işlem düzeltildi, çok teşekkürler! – MeanwhileInHell

    4

    Bu problemi yaşadım ve neden fayans çerçevesini kullanıyordum ve fayans-def.xml'de görünüm adını belirtmedim. Fayans-def.xml yapılandırıldıktan sonra problem çözüldü.

    2

    Bu problemi de yaşadım. @ResponseBody ek açıklamasını kullanarak çözdüm. Bunun gibi

    :

    yerine bir boşluk getiri
    @RequestMapping(value = "/user/prefs/order", method = RequestMethod.POST) 
    @ResponseBody 
    public void updateUsersPrefs(@RequestBody Map<String, ArrayList> body, HttpServletRequest request) { 
        ... 
    }