2016-02-24 15 views
1

Я пытаюсь отправить объект JSON с Ajax в контроллер Spring Spring MVC, но я встретил некоторые проблемы.Spring MVC Ajax POST

Давайте представим вам мой код:

Контроллер

@RequestMapping(value = "/register/checkUsername.html", method = RequestMethod.POST, produces=MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody JsonResponse checkUsername(@RequestBody JsonUsername username) { 
    String usernameString = username.getUsername(); 
    JsonResponse response = new JsonResponse(); 
    response.setMessage(usernameString + "Available"); 
    return response; 
} 

Ajax Функция

function displayUsernamError(data) { 
    var json = "<h4>Eroare</h4><pre>" 
      + JSON.stringify(data, null, 4) + "</pre>"; 
    $('#usernameError').html(json); 
} 

function checkUsername(){ 
    var username = document.getElementById("username"); 
    var search = { 
      "username" : username.value 
    } 

    $.ajax({ 
      type : "POST", 
      contentType : 'application/json; charset=utf-8', 
      dataType : 'json', 
      url : "http://localhost:8080/skill-assessment/register/checkUsername.html", 
      data : JSON.stringify(search), 
      success : function(result) { 
       console.log("SUCCESS: ", data); 
       displayUsernamError(result); 
      }, 
      error: function(e){ 
       console.log("ERROR: ", e); 
       displayUsernamError(e); 
      }, 
      done : function(e) { 
       console.log("DONE"); 
      } 
    }); 
} 

И, наконец, HTML форма:

<form:form modelAttribute="user" method="POST" enctype="utf8"> 
     <tr> 
      <td><label>Username</label></td> 
      <td><form:input path="name" id="username" /></td> 
      <td> 
      <p id="usernameError"> 
      </p> 
      </td> 
     </tr> 
     <button type="button" onClick="checkUsername()">Register</button> 
    </form:form> 

Итак, я звоню проверка ame, когда я нажимаю на кнопку Register, только для теста.

Вызывается функция ajax и отправляется JSON на контроллер. Я использовал отладку, и контроллер, похоже, получает объект JSON.

Проблема с Ответом контроллера, потому что в DIV ошибок с моей страницы HTML, я получаю эту ошибку:

HTTP Status 406 Ресурса, определяемый этот запрос, может только генерировать ответы с характеристиками неприемлемо в соответствии с заголовком запроса \ "accept \".

В чем проблема? Кто может дать мне идею?

+0

использование потребляет = MediaType.APPLICATION_JSON_VALUE –

ответ

2

Вы должны указать ниже код внутри запроса отображения аннотаций

@RequestMapping(value = "/register/checkUsername.html", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE) 

вам нет необходимости указать производит атрибут, потому что @Responsebody будет производить контент на основе запроса объекта типа контента [ необязательный]. если вы хотите другого, тогда только тогда вы должны это упомянуть.

; charset = utf-8 по умолчанию используется в вызове Ajax. вам не нужно упоминать об этом отдельно. попробуйте сделать эти изменения.

1

использование @ResponseBody нужно возражать против JSON, кажется не хватает какой-то баночку файл (ДЖЕКСОНА-картографа-asl.jar и ДЖЕКСОНА-ядро-asl.jar) попытаться импортировать его

1

Сначала проверьте, если ваш контроллер возвращая JSON. Вы можете использовать любой клиент REST и посмотреть, что является заголовком возврата. Если нет, то добавьте компонент компоновщика Джексона.

Также попробуйте настроить заголовок Accept в вызове ajax.

$.ajax({ 
    headers: { 
    Accept : "application/json", 
    Content-Type: "application/json" 
    }, 
    data: "data", 
    ... 
}) 
1

в .js (Java Script) Аякса функция

var variable="test"; 
$.ajax({ 
    url: baseUrl + "nameController/test1", 
    async: false, 
    data: {val: variable}, 
    dataType: 'html', 
    success: function (dat) { 
     console.log(dat); 
    } 
}); 

создать nameController.java контроллер

@RequestMapping(value = "test1", method = RequestMethod.POST) 
public @ResponseBody 
String checkRoomStatusReservation(@RequestParam(value = "val", required = true) String parse) { 
    System.out.println("parse"+parse); 
    //value from parse=test 
return parse; 
} 

вы можете попробовать это