将javascript变量发送到spring controller

时间:2017-08-21 07:05:14

标签: javascript java spring spring-mvc

我正在尝试使用spring mvc开发简单的应用程序,我需要将javascript参数传递给spring控制器。我尝试了几种方法,但没有一种方法可以使用。以下是我的javascript和spring控制器。请帮我解决这个问题。

Java脚本

function searchViaAjax(id) {
    alert(id);
    $.ajax({
        type : "POST",
        contentType : "application/json",
        url : "search/api/getSearchResult",
        data : JSON.stringify(id),
        dataType : 'json',
        timeout : 100000,
        success : function(id) {
            console.log("SUCCESS: ", id);
            display(id);
            alert(response);   
        },
        error : function(e) {
            console.log("ERROR: ", e);
            display(e);
        },
        done : function(e) {
            console.log("DONE");
        }
    });
}

AjaxController.java

@Controller
public class AjaxController {
    @ResponseBody
    @RequestMapping(value = "/search/api/getSearchResult")

    public String getSearchResultViaAjax(@RequestParam(value = "id") int id) {
        System.out.println("come to ajax"+ id);
        return "hello";

    }
}

3 个答案:

答案 0 :(得分:2)

当您将json作为请求者传递时,上述调用适用。要发送请求参数,您必须如下:

使用以下ajax调用:

function searchViaAjax(id) {
var tempId = id;
$.ajax({
    type : "POST",
    url : "/search/api/getSearchResult",
    data : {id:tempId},
    timeout : 100000,
    success : function(id) {
        console.log("SUCCESS: ", id);
        display(id);
        alert(response);   
    },
    error : function(e) {
        console.log("ERROR: ", e);
        display(e);
    },
    done : function(e) {
        console.log("DONE");
    }
});
}

您也可以使用以下get方法实现此目的:

 function searchViaAjax(id) { 
 $.ajax({ 
 type : "GET", 
 url : "/search/api/getSearchResult/"+id, 
 timeout : 100000, 
 success : function(id) { 
 console.log("SUCCESS: ", id); 
 display(id); 
 alert(response); 
}, 
error : function(e) { 
console.log("ERROR: ", e); 
display(e); 
}, 
done : function(e) { 
console.log("DONE"); 
} 
}); 
} 

@Controller 
public class AjaxController { 

@ResponseBody 
@RequestMapping(value = "/search/api/getSearchResult/{id}") 
public String getSearchResultViaAjax(@PathVariable(value = "id") Integer id) 
{ 
 return String.valueOf(id); 
} 
}

答案 1 :(得分:0)

使用JSON.stringify时,实际上是在向Spring控制器的方法发送JSON对象。您所要做的就是将json对象包装为java对象,如此。

public class UserId {

    private int id;

    // setters and getters

}

在您的控制器方法中,使用@RequestBody将您的JSON映射到UserId类,如此

@ResponseBody
@RequestMapping(value = "/search/api/getSearchResult", method = RequestMethod.POST)
public String getSearchResultViaAjax(@RequestBody UserId user) {
    System.out.println("come to ajax" + user.getId());
    return "hello";
}

PS:尚未测试但应该可以使用。

答案 2 :(得分:0)

这是您从ajax到控制器的帖子请求。 您的弹簧控制器上缺少“methodType = RequestMethod.POST”。

@RequestMapping(value = "/search/api/getSearchResult")替换为

@RequestMapping(value = "/search/api/getSearchResult", methodType=RequestMethod.POST)