如何使用Spring MVC正确处理AJAX请求?为什么这个例子在我的项目中不起作用?

时间:2015-10-21 13:50:40

标签: java ajax spring spring-mvc java-ee

我是Spring MVC和AJAX的新手,我遇到了以下问题。

在页面中,我的应用程序执行此JavaScript函数,该函数执行AJAX GET请求:

function caricaDettaglioRegione(regioneSelezionata) {
    var codiceRegione = regioneSelezionata.getAttribute("data-reveal-id");
    var nomeRegione = regioneSelezionata.getAttribute("data-nome-regione");

    alert("codiceRegione: " + codiceRegione + " - nomeRegione: " + nomeRegione);

    $.ajax({
           type: "GET",
           data: {'codiceRegione' : codiceRegione
                 },
           url: "riepilogoDettaglioRegione",
           contentType:"application/json"

        }).done(function(response) {
            alert("DONE");

        }).error(function(xhr) {
            alert("ERROR");
            manageError(xhr);
        });
}

正如您在Http GET请求中看到的那样, codiceRegione 的值作为请求参数传递(名为 codiceRegione ):

           data: {'codiceRegione' : codiceRegione
                 },

所以现在我想处理这个AJAX请求,我已经将这个controll方法实现到 @Controller 类中:

@RequestMapping(value = "/riepilogoDettaglioRegione", method = RequestMethod.GET)
public String riepilogoDettaglioRegione(@RequestParam("codiceRegione") String codiceRegione, Model model) {
    System.out.println("INTO riepilogoDettaglioRegione()");

    return "blabla";
}

正如你所看到它处理GET请求到之前的资源( / riepilogoDettaglioRegione ),我尝试通过 @RequestParam(&)检索 codiceRegione 请求参数#34; codiceRegione&#34)

但它无法正常工作,并且在执行上一个AJAX请求时不会执行此方法。

为什么呢?我错过了什么?我该如何解决这个问题?

TNX

2 个答案:

答案 0 :(得分:1)

你明确地说codiceRegione是一个参数而不是请求体。

因此,您需要更改您的ajax调用,如:

 $.ajax({
       type: "GET",
       url: "riepilogoDettaglioRegione?codiceRegione=blah",
       contentType:"application/json"

    }).done(function(response) {
        alert("DONE");

    }).error(function(xhr) {
        alert("ERROR");
        manageError(xhr);
    });

或者将codiceRegione包装在一个对象中,然后为@RequestBody更改注释@RequestParam。

希望它有所帮助。

答案 1 :(得分:0)

由我自己解决。 问题是该项目使用了Spring Security,并且该资源也必须对未登录的用户也是可访问的,所以我必须插入这样的东西

<intercept-url pattern="/riepilogoDettaglioRegione" access="permitAll" />

将authernticationManager配置导入 spring-security.xml 文件。