0

我正在使用 Spring MVC3.2 并且我有一个注册表单(http://my-server.com:8080/tracks/apks)。用户将其发布到服务器,验证失败时服务器将返回错误消息。但是我从服务器收到错误消息,URL 与我想要的不同。这是我的代码:

Web.xml
<servlet-mapping>
    <servlet-name>tracks</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>


applicationContext.xml
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/pages/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

@Controller
@RequestMapping("/apks")
public class ApkController {

@RequestMapping()
public ModelAndView index() {
    Map<String, Object> modelMap = new HashMap<String, Object>();
    modelMap.put("menus",   AdminService.getMenus("apks"));
    return new ModelAndView("apks", "model", modelMap);
}

@RequestMapping(value = "/insert", method = RequestMethod.POST)
public ModelAndView uploadApk(ApkInfo apkInfo, BindingResult bindingResult) {

     Map<String, Object> modelMap = new HashMap<String, Object>();
     modelMap.put("menus",   AdminService.getMenus("apks"));

     if (!fileExists(apk.getFileName())){

     modelMap.put("message", message); 
     }

     //Do something

     return new ModelAndView("apks", "model", modelMap);
}

调用 uploadApk 后,我期望http://my-server.com:8080/tracks/apks但返回的 URL 是http://my-server.com:8080/tracks/apks/insert

我该怎么做才能修复它?

提前致谢。

4

2 回答 2

0

几个观察。

  1. 在您的 web.xml 中,您是否指定了 context-paran、servlet 跟踪和侦听器?
  2. 您的 spring 配置文件中是否启用了 context:component-scan?
  3. 在方法级别使用 requestMapping 将请求映射到特定方法。
于 2013-04-09T05:12:19.660 回答
0

“返回的 URL”是什么意思?

你应该访问' http://my-server.com:8080/apks/insert '来调用'uploadApk'方法因为你有

@RequestMapping("/apks")

在您的控制器上和

@RequestMapping(value = "/insert", method = RequestMethod.POST)

在您的“uploadApk”方法上。


你是如何调用“uploadApk”方法的?

我认为您应该对此进行更多解释以获得适当的答案。


由于 web.xml 中 servlet-mapping 的 url-pattern 是“/”,因此您应该删除 url 中的“/tracks”。

'tracks' 只是一个 servlet 名称,而不是一个 servlet 路径。

所以如果你访问 /tracks/apks/insert 那么你会得到一个 404 错误。改为访问 /apks/insert。


我猜您在调用“uploadApk”方法后可能需要重定向,因为您在问题上附加了“重定向”标签并使用了“返回的 URL”一词。(正确的?)

如果我的猜测是正确的并且您想重定向浏览器,请参阅SpringMVC 3.2 Redirect View docs

使用以下代码进行重定向。

return new RedirectView("url-you-want");

或者

return "redirect:url-you-want"
于 2013-04-09T05:00:03.353 回答