Я не хотел использовать сеанс недавно. Я хочу испытать более безопасный и стабильный токен, и написать унифицированный интерфейс для браузера и приложения. Поэтому я изменил стойку регистрации учебной программы на Ajax, а затем прыгнул и использовал Springmvc для управления пересылками. У меня более глубокое понимание передачи данных JSON. Я поделюсь этим и, пожалуйста, поправьте меня.
В Springmvc мы можем выбрать несколько способов принять JSON. Прежде чем говорить о том, как Springmvc принимает JSON, давайте поговорим о том, что такое JSON. Я не буду уточнить конкретное определение. В JavaScript мы часто определяем объекты JSON таким образом.
var jsonObject = {"username": "admin", "пароль": 123}В этой форме мы называем это объектом JSON, а также есть концепция под названием JSON String. Как следует из названия, целое, обернутое '' или "", мы называем это строкой. Мы знаем, что строки могут быть выводом непосредственно, но объекты не могут быть выведены напрямую. Итак, в JavaScript мы можем
// Определите объект jsonObjectVar jsonObject = {"userName": "admin", "пароль": 123}; alert (jsonObject);В настоящее время [объект объекта] будет отображаться без вывода содержимого объекта JSON. JavaScript предоставляет нам два инструмента
Json.parse () используется для преобразования строки JSON в объект JavaScript. Json.stringify () используется для преобразования значений JavaScript в строки json.
Итак, когда мы набираем
Alert (json.stringify (jsonObject));
{«Имя пользователя»: «Админ», «Пароль»: 123} будет отображаться;
* Хорошо, это все для объяснения JSON. Поговорим о Springmvc *
Поскольку у JSON есть два вышеуказанных способа существования, какой из них мы должны передать значение SpringMVC через AJAX?
Сначала мы пытаемся напрямую отправить объект JSON
// определить json объект var username = $ ("#username"). Val (); var password = $ ("#пароль"). val (); var json = {"username": имя пользователя, "пароль": пароль}; // jQuery ajax запрос $ .ajax ({url: "jsontest", тип: "post", async: true, data: json, datatype: 'json', успех: function (data) {if (data.UserStUs = remearms) } else {if ($ ("#errormsg"). Длина <= 0) {$ ("form [name = loginform]"). Append (errormsg);Давайте сначала подумаем о том, что Springmvc предоставляет нам. Есть аннотация @RequestParam. Для этой аннотации его функция в основном такая же, как Quest.getParameter в нашем Сервлете. Сначала мы используем эту аннотацию, чтобы получить ее
@Requestmapping ("/jsontest") public void -тест (@RequestParam (value = "username", обязательный = true) String userName, @RequestParam (value = "пароль", обязательный = true) String пароль) {System.out.println ("usermeme:" + username); System.out.println ("пароль:" + пароль); }Наши параметры успешно вывод с фона были успешно приняты!
Springmvc настолько умный, если мы удалим аннотацию @requestparam, что произойдет, если мы поместим два значения непосредственно?
@Requestmapping ("/jsontest") public void test (String username, String Password) {System.out.println ("username:" + username); System.out.println ("пароль:" + пароль); }Это было на самом деле успешным. Я не буду уточнять по принципу здесь. Заинтересованные друзья могут сломать свою точку зрения и взглянуть.
Springmvc предоставляет @requestbody, который используется для обработки данных, отправляемых по типу контента на переднем плане: не приложение/xwww-form-urlencodisted, например, приложение/JSON, Application/XML и т. Д.;
Осторожные друзья, возможно, обнаружили, что в предыдущем Ajax мы не определили тип типа контента, и JQuery использует тип Application/X-WWW-Form-Urlencode по умолчанию. Это означает, что аннотация SpringMVC @RequestParam и запрос сервлета. GetParameter может принимать объекты JSON, передаваемые в этом формате.
Почему! ? Я считаю, что все знакомы с запросами. Он отправляет параметры на сервер в форме URL -адреса? Username = ”admin» & password = 123, а request.getParameter может получить этот параметр. Мы также можем увидеть это в адресной панели браузера. Что касается поста, который мы используем в Ajax и отправляют объект JSON, как мы получаем его в заднем плане? Ответ заключается в методе кодирования XWW-Form-UrlencoDed, преобразует данные JSON в строку (username = ”admin» и password = 123) и добавляет эту строку к URL-адресу и использует? Сегментация (очень похоже на метод получения). Когда метод отправки является публикацией, браузер инкапсулирует данные в корпус HTTP, а затем отправляет их на сервер. Так что он не будет отображаться на URL. (Этот абзац может быть чем -то вроде поворота, я надеюсь, что все смогут тщательно его понять.)
Наконец -то закончил говорить, вдохнул долго вздох. Поэтому, когда мы используем аннотацию @Requestbody, контент-тип стойки регистрации должен быть изменен на Application/JSON. Если нет изменений, стойка регистрации сообщит об ошибке 415 (неподдерживаемый тип носителя). Фоновое журнал будет сообщать о типе содержимого ошибки «Приложение/X-WWW-Form-Urlencoded; charset = UTF-8 'не поддерживается. Эти ошибки не будут отображаться в Tomcat под Eclipse. Он будет отображаться только при использовании журнала. Вы можете прочитать мою предыдущую статью о том, как настроить журнал. Далее давайте настроим это правильно. Вышеупомянутое, что тип контента должен быть изменен, и наши данные также должны быть изменены. Этот метод аннотации принимает только строки JSON вместо объектов JSON.
$ .ajax ({url: "jsontest", type: "post", async: true, contentType: "application/json", data: json.stringify (json), datatype: 'json', success: function (data) {if (data.userstatus === "успех") {##errormsg "). ($ ("#errormsg"). Длина <= 0) {$ ("form [name = loginform]"). Append (errormsg);Фон также меняется. JSON можно на самом деле понимать как пара ключей, поэтому мы используем карту для ее приема, а затем дальнейшее обработку строки или других типов данных.
@Requestmapping ("/jsontest") public void -тест (@Requestbody (обязательный = true) map <string, object> map) {string username = map.get ("username"). ToString (); String password = map.get ("пароль"). ToString (); System.out.println ("Имя пользователя:" + имя пользователя); System.out.println ("пароль:" + пароль); }В то же время я снова вспомнил волшебный SpringMVC, поэтому я решил удалить аннотацию и попробовать ее. Хорошо, я был решительно взорван с ошибкой нулевого указателя ... Я попытался остановить ее.
SpringMVC также предоставляет метод для привязки параметров непосредственно с POJO, давайте попробуем. Столь регистрации такая же, поэтому я не буду публиковать ее.
@Requestmapping ("/jsontest") public void -тест (пользователь пользователя @Requestbody) {string username = user.getUsername (); String password = user.getPassword (); System.out.println ("Имя пользователя:" + имя пользователя); System.out.println ("пароль:" + пароль); }Хорошо, на этот раз вы можете получить значение. Мне лично не нравится этот метод для загрузки небольших объемов данных, таких как логин. В пользователе много переменных. Я использовал только два из них. Нет необходимости создавать пользовательский объект. Как правило, когда объем данных невелик, я все равно предпочитаю использовать отдельные значения, чтобы получить их. Давайте снова подумаем об этом, если мы загружаем объекты JSON, можем ли мы связать Pojo? Ответ да. Не используйте аннотацию @RequestParam, в противном случае требуемый параметр пользователя «пользователь» нет. Объяснение в основном здесь, давайте подведем его ниже.
Сначала мы говорим о объектах JSON и струнах JSON
Затем, когда SpringMVC принимает два или два формата JSON, настройка Front-End ContentType и использует ли Back-End аннотации, чтобы принять его, он также упомянул небольшой сервлет.
Когда Ajax загружается в формате Application/X-WWW-Form-Urlencode, необходимо использовать @RequestParam или Сервлет, чтобы получить его в фоновом режиме. Когда Ajax загружается в формате Application/JSON, он используется для использования струн JSON, фон должен использовать @Rquestbody, чтобы получить его.
Это некоторое краткое изложение моих экспериментов в течение дня. Надеюсь, это может вам помочь. Если есть какие -либо ошибки, пожалуйста, простите меня и поправьте меня.
Приведенное выше подробное объяснение параметров JSON, принятых с помощью SpringMVC, и краткого изложения общих ошибок - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.