Eu não queria usar a sessão recentemente. Quero experimentar um token de maneira mais seguro e estável e escrever uma interface unificada para o navegador e o aplicativo. Então, mudei a recepção de um programa de treinamento para o Ajax e depois pulei e usei o SpringMVC para controlar o encaminhamento. Tenho um entendimento mais profundo de transmitir dados JSON. Vou compartilhar e, por favor, me corrigir.
No SpringMVC, podemos escolher várias maneiras de aceitar o JSON. Antes de falar sobre como o Springmvc aceita o JSON, vamos falar sobre o que é JSON. Não vou elaborar a definição específica. Em JavaScript, geralmente definimos objetos JSON dessa maneira.
var jsonObject = {"nome de usuário": "admin", "senha": 123}Nesse formulário, chamamos de objeto JSON, e também há um conceito chamado JSON String. Como o nome sugere, um inteiro embrulhado por '' ou "", chamamos de string. Sabemos que as strings podem ser emitidas diretamente, mas os objetos não podem ser emitidos diretamente. Então, em JavaScript, podemos
// define um objeto jsonObjectvar jsonObject = {"nome de usuário": "admin", "senha": 123}; alert (jsonObject);No momento, [objeto objeto] será exibido sem a saída do conteúdo do objeto JSON. JavaScript nos fornece duas ferramentas
Json.parse () é usado para converter uma string json em um objeto JavaScript. JSON.Stringify () é usado para converter valores de JavaScript em Strings JSON.
Então, quando digitamos
alerta (json.stringify (jsonObject));
{"nome de usuário": "admin", "senha": 123} será exibido;
* Ok, isso é tudo para a explicação do JSON. Vamos falar sobre Springmvc *
Como o JSON tem as duas maneiras de existência acima, qual devemos passar o valor para o SpringMVC através do Ajax?
Primeiro tentamos enviar o objeto JSON diretamente
// define o objeto json var userName = $ ("#nome de usuário"). Val (); var senha = $ ("#senha"). val (); var json = {"nome de usuário": nome de usuário, "senha": senha}; // jQuery ajax solicita $ .ajax ({url: "jsontest", tipo: "post", async: true, data: json, datatype: 'json', sucesso: function (data) {if (Data.Usstatus: SUCTUS === "" } else {if ($ ("#errormsg"). comprimento <= 0) {$ ("form [name = loginform]"). Append (errorMsg);Vamos primeiro pensar sobre o que a SpringMVC nos fornece. Há uma anotação de @RequestParam. Para esta anotação, sua função é basicamente a mesma que a solicitação.GetParameter em nosso servlet. Primeiro usamos esta anotação para obtê -lo
@RequestMapping ("/JSONTEST") Teste de void public (@RequestParam (value = "nome de usuário", requerido = true) String UserName, @RequestParam (value = "senha", requerir = true) string senha) {System.out.println ("Nome UserName:" + UserName); System.out.println ("senha:" + senha); }Nossos parâmetros produtivos com sucesso do fundo foram aceitos com sucesso!
Springmvc é tão inteligente, se removermos a anotação @RequestParam, o que acontecerá se colocarmos dois valores diretamente?
@RequestMapping ("/JSONTEST") Teste Void public (String UserName, String senha) {System.out.println ("Nome de usuário:" + nome de usuário); System.out.println ("senha:" + senha); }Foi realmente bem -sucedido. Não vou elaborar o princípio aqui. Amigos interessados podem quebrar o ponto e dar uma olhada.
O SpringMVC fornece um @Requestbody, que é usado para processar os dados enviados pelo tipo de conteúdo da definição de primeiro plano: não a codificação Application/Xwww-Form-Form-Urlencoded, como Application/JSON, Application/XML, etc.;
Amigos cuidadosos podem ter descoberto que, no Ajax anterior, não definimos o tipo de tipo de conteúdo, e o JQuery usa o tipo de aplicativo/x-www-forma-form-forlcoded por padrão. Isso significa que a anotação @RequestParam da Springmvc, e a solicitação do servlet.
Por que! ? Eu acredito que todos estão familiarizados com os pedidos de Get. Ele envia parâmetros para o servidor na forma de URL? Nome de usuário = "admin" & senha = 123, e o request.getParameter pode receber esse parâmetro. Também podemos ver isso na barra de endereços do navegador. Quanto ao post que usamos no Ajax e envia um objeto JSON, como o colocamos em segundo plano? A resposta está no método de codificação do tipo de conteúdo X-WWW-Form-Form-Urlencoded converte dados JSON em uma string, (nome de usuário = ”admin” & senha = 123) e adiciona essa string ao URL e usa? segmentação (é muito semelhante ao método get). Quando o método de envio é publicado, o navegador encapsula os dados no corpo HTTP e o envia para o servidor. Portanto, não será exibido no URL. (Este parágrafo pode ser uma reviravolta, espero que todos possam entendê -lo com cuidado.)
Finalmente terminou de falar, respirou um longo suspiro. Portanto, quando usamos a anotação @requestbody, o tipo de conteúdo da recepção deve ser alterado para aplicativo/json. Se não houver alteração, a recepção relatará um erro de 415 (tipo de mídia não suportado). O log de segundo plano relatará um tipo de erro Tipo de conteúdo 'Aplicativo/X-WWW-Form-Form-Urlencoded; charset = utf-8' não suportado. Esses erros não serão exibidos no Tomcat sob o Eclipse. Ele será exibido apenas quando o log for usado. Você pode ler meu artigo anterior sobre como configurar o log. Em seguida, vamos configurá -lo corretamente. O mencionado acima que o tipo de conteúdo precisa ser alterado e nossos dados também devem ser alterados. Esse método de anotação aceita apenas strings JSON em vez de objetos JSON.
$ .ajax ({url: "JSONTEST", tipo: "post", assíncrono: true, contentType: "Application/json", dados: json.stringify (json), datatype: 'json', success: function (dados) {if (data.userstatus === "succcess") {($ ($ ($ (#Errorm (data) {if (data.userstatus === "succcess") {$ ($ ($ (#Errorm (data) {if (data.userstatus === "succcess") {$ ($ ($ "#Errorm (dados) {if (data.userstatus ===" succcess ") {"#"#" ($ ("#errorMsg"). Length <= 0) {$ ("formulário [nome = loginform]"). Appender (errorMsg);O fundo também muda. O JSON pode realmente ser entendido como um par de valores-chave, por isso usamos o mapa para recebê-lo e, em seguida, processar ainda mais a string ou outros tipos de dados.
@RequestMapping ("/JSONTEST") Public Void Test (@RequestBody (requerir = true) mapa <string, object> map) {string userrames = map.get ("nome de usuário"). Tostring (); String senha = map.get ("senha"). Tostring (); System.out.println ("Nome de usuário:" + nome de usuário); System.out.println ("senha:" + senha); }Ao mesmo tempo, lembrei -me do Magical Springmvc novamente, então decidi remover a anotação e experimentá -lo. OK, fui decisivamente explodido com um erro de ponteiro nulo ... tentei impedi -lo.
O SpringMVC também fornece um método para ligar parâmetros diretamente ao POJO, vamos tentar. A recepção é a mesma, então não vou postar.
@RequestMapping ("/JSONTEST") TESTE PUBLICO VOID (Usuário @RequestBody User) {String UserName = User.getUserName (); String senha = user.getpassword (); System.out.println ("Nome de usuário:" + nome de usuário); System.out.println ("senha:" + senha); }Ok, desta vez você pode obter o valor. Pessoalmente, não gosto desse método para fazer upload de pequenos volumes de dados como o login. Existem muitas variáveis no usuário. Eu só usei dois deles. Não há necessidade de criar um objeto de usuário. Geralmente, quando o volume de dados é pequeno, ainda prefiro usar valores separados para obtê -los. Vamos pensar sobre isso novamente, se estamos enviando objetos JSON, podemos vincular Pojo? A resposta é sim. Não use a anotação @RequestParam, caso contrário, o parâmetro do usuário necessário 'Usuário' não está presente. A explicação é basicamente aqui, vamos resumir abaixo.
Primeiro falamos sobre objetos JSON e Strings JSON
Então, quando o Springmvc aceita dois ou dois formatos JSON, a configuração do ContentType front-end e se o back-end usa anotações para aceitá-lo, também mencionou um pequeno servlet.
Quando o Ajax é carregado no formato Application/X-Www-Form-Form-Urlencoded, é necessário usar @RequestParam ou Servlet para obtê-lo em segundo plano. Quando o AJAX é carregado no formato Application/JSON, ele é usado para usar strings JSON, o plano de fundo precisa usar o @rquestbody para obtê -lo.
Estes são algum resumo dos meus experimentos por um dia. Espero que possa ajudá -lo. Se houver algum erro, por favor me perdoe e me corrija.
A explicação detalhada acima dos parâmetros JSON aceita pelo SpringMVC e o resumo dos erros comuns é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.