如何在春天发送和检索params?

时间:2015-07-20 21:07:44

标签: java ajax spring spring-mvc

我很想做一件简单的事情,用ajax,发送请求(使用GET或POST)。

我将以json格式发送2个参数,我只是想让它们返回并发送响应,仍然,我总是得到错误400和其他我不知道什么是错的,任何想法如何?

我的开篇基于这篇文章:http://fruzenshtein.com/spring-mvc-ajax-jquery/

我正在使用spring mvc。

到目前为止,我有这个:

$(".update_agent").live('click', function(){

            var agent = { "agentId" : agentID, "hostAGent" : hostID};
            //send ajax
            $.ajax({
                url: url,
                data: JSON.stringify(agent),
                type: "GET",
                beforeSend: function(xhr) {
                    xhr.setRequestHeader("Accept", "application/json");
                    xhr.setRequestHeader("Content-Type", "application/json");
                },
                success: function(data) {
                    alert("success");
                },
                error: function(){
                    alert("error");
                }
            });
        })

在我的java控制器上我有这个

@RequestMapping(value = "/update", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public int updateAgent(HttpServletRequest req, HttpServletResponse res) throws IOException{
    req.getParameterValues("agentId");
    return AGENT_UPDATE_SUCCESS;
}

但我无法回复,不知道如何提出参数的请求,任何想法?

感谢。

===================== UPDATE ========================= ===

我改变了代码,看起来像......

$.ajax({
        headers: {
        "Accept": "application/json",
        "Content-Type": "application/json"
        },
        type: 'POST',
        url: url,
        data: JSON.stringify(agent),
        dataType: 'json',
        success:function(data) {
           alert("success");
        },
        error: function(){
            alert("error");
        }
});

在我的控制器上

@RequestMapping(value = "/update", method = RequestMethod.POST)
    public @ResponseBody Integer  updateAgent(@RequestBody String param) throws IOException{
        System.out.println(param);
        //do something...
        return 1;

    }

问题是我收到错误415,媒体类型不支持,有什么建议?

1 个答案:

答案 0 :(得分:1)

GET-request不能有'data'-field。您需要将数据作为网址的一部分发送:

$.ajax({
        url: url + "?agent=" + JSON.stringify(agent),
        type: "GET",
        beforeSend: function(xhr) {
            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Content-Type", "application/json");
        },
        success: function(data) {
            alert("success");
        },
        error: function(){
            alert("error");
        }
    });

现在您可以将控制器中的数据作为:

@ResponseBody public ResponseEntity<String> updateAgent(@RequestParam(value = "agent") String agentJson){
...
}

或者您可以发送POST请求。通过POST请求,您可以将数据发送为requestBody

public @ResponseBody ResponseEntity<String> updateAgent(@RequestBody String agentJson){
...
}

编辑: 创建一个新的Agent - 类:

public class Agent {
    private long agentId;
    private long hostAgent;
    ...
    getter and setter
    ...
}

现在将控制器更新为:

public @ResponseBody ResponseEntity<String> updateAgent(@RequestBody Agent agent){
    System.out.println(agent.getAgentId());
}

并将ajax-call的“Content-Type”更改为“application / json”。

EDIT2: 将您的ajax呼叫数据更改为:

data: { agentId: agentID, hostAgent : hostAgentID} ,

甚至

data: agent ,

不要忘记在您的座席对象中将“hostAGent”更改为“hostAgent”,否则您将获得400!

现在ajax会将数据作为请求参数发送,您可以通过以下方式获取控制器中的数据:

public @ResponseBody ResponseEntity<String> updateAgent(@RequestParam(value = "agentId") long agentId, @RequestParam(value = "hostAgent") long hostAgentId){
    System.out.println(agentId);
}