2015-07-20 1 views
0

Я triyng, чтобы сделать простую вещь, с ajax, отправить запрос (используя GET или POST).Как я могу отправить и получить параметры весной?

Я буду отправлять 2 параметра в формате json, и я просто хочу вернуть их и отправить ответ, тем не менее, я всегда получаю ошибку 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; 
} 

Но я не могу получить его обратно, не имеют ни малейшего представления о том, как сделать запрос о Params , Есть идеи?

Спасибо.

===================== ОБНОВЛЕНИЕ ======================== ====

Ive изменил код, и это, как он выглядит ...

$.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, неподдерживаемый тип СМИ, любые советы?

+0

где вы определить URL? – Muraad

+0

до щелчка ... то же самое с другими константами там ... – jpganz18

ответ

1

GET-запрос не может иметь поле данных. Вы должны отправить свои данные как часть URL:

$.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){ 
... 
} 

EDIT: создать новый 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()); 
} 

и измените «Content-Type» ajax-call на «application/json».

EDIT2: изменить свои данные Ajax-вызова к:

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

или даже

data: agent , 

Не забудьте изменить "hostAGent" на "hostAgent" в вашем объекте агента, или вы получите 400 !!!

Теперь Аякс будет передавать данные в качестве параметров запроса, вы можете получить данные в контроллере по:

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

когда я делаю запрос на почту, я всегда получаю статус 415, неподдерживаемый тип медиа ... любая идея? – jpganz18

+0

просто удалите 'consumes = MediaType.APPLICATION_JSON_VALUE' в вашем контроллере – JohnnyAW

+0

кстати. я бы удалил 'beforeSend' и заменил его на свойство header:' headers: { Принять: «application/json», «Content-Type»: «application/json» } ' – JohnnyAW

Смежные вопросы