【问题标题】:AJAX returns 404 in Spring MVCAJAX 在 Spring MVC 中返回 404
【发布时间】:2015-05-06 08:23:58
【问题描述】:

ViewResolver(我的 jsp 位于前缀值指定的正确文件夹中):

<!-- Resolves views selected for rendering by @Controllers --> 
<!-- to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

Servlet 映射:

<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>*.fst</url-pattern>
</servlet-mapping>

控制器:

@Controller
public class HomeController {   
    private static final Logger logger = 
        LoggerFactory.getLogger(HomeController.class);

    @RequestMapping("/home")
    public ModelAndView home(String user, HttpServletRequest request) {
        logger.info("Home controller has been executed");
        ModelAndView mv = new ModelAndView();

        mv.addObject("userName", user);
        mv.addObject("controllerName", request.getRequestURI());
        mv.setViewName("home");

        return mv;
    }

    @RequestMapping(value = "/testAjax", method = RequestMethod.POST)
    public String testAjax(@RequestParam("memberId") String id, 
        HttpServletRequest request, HttpServletResponse response, 
        Locale locale, Model model) {

        logger.info("Text Ajax action has been executed. My Parameter is " + id);

        return id;
    }
}

在 STS IDE 上打开 Tomcat 8 服务器后,使用此 url http://localhost:8080/home.fst 访问此网站正常。

但在页面上,像下面这样调用 AJAX 会引发 404 错误:

$.ajax({
    type: "POST",
    url: "/testAjax.fst",
    data: {"memberId" : "test"},
    success: function (result) {
        console.log(result)
    } 
});

这是控制台错误日志:

 POST http://localhost:8080/testAjax.fst 404 (Not Found)
 k.cors.a.crossDomain.send                     jquery-2.1.3.min.js:4
 n.extend.ajaxhome.fst:11 (anonymous function) jquery-2.1.3.min.js:3
 n.event.dispatch                              jquery-2.1.3.min.js:3
 r.handle

奇怪的是它调用testAjax控制器很好,服务器上没有错误日志。

logger.info("Text Ajax action has been executed. My Parameter is " + id);

当我的 AJAX 调用 textAjax 操作时,也会打印日志。我也用调试点检查了它(它坏了)。

好像是怎么回事??

【问题讨论】:

  • 尝试在 url 中仅使用 /testAjax
  • @HarshalPatil 比尝试使用.fst 更糟糕。它甚至不能调用控制器。
  • 是的。我认为您需要提供根 url 然后再试一次,例如在 url 中指定项目名称然后 /testAjax 它将起作用。
  • @HarshalPatil 都不起作用..

标签: ajax spring spring-mvc


【解决方案1】:

一切都很好,只需在您的方法中添加 @ResponseBody 注释,我建议您将请求方法 POST 更改为 GET

春天

@RequestMapping(value = "/testAjax", method = RequestMethod.GET) //Made Change
@ResponseBody //added
public String testAjax(@RequestParam("memberId") String id,     HttpServletRequest request, HttpServletResponse response, Locale locale, Model model) {
    logger.info("Text Ajax action has been executed. My Parameter is " + id);

    return id;
}

JQuery

$.ajax({
    type: "GET", //Made Change
    url:"/testAjax.fst",
    data: {"memberId" : "test"},
    success: function (result) {
    console.log(result)
    } 
});

【讨论】:

  • 谢谢。你能解释一下为什么添加@ResponseBody 可以解决这个问题吗?
  • 不客气 :) 。因为我们想要内容而不是整个 jsp 文件。以简单的方式@ResponseBody 将直接返回内容,无需任何 JSP。
  • 我认为 POST 也是可能的,并且始终是发送数据的更好方法。主要的解决方案是@ResponseBody。
猜你喜欢
  • 2019-10-22
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 2016-07-17
相关资源
最近更新 更多