Springmvc处理post+json数据

Posted 工云IT技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springmvc处理post+json数据相关的知识,希望对你有一定的参考价值。


1Springmvc处理post+json请求功能介绍 

SpringMvc能够处理来自用户的post请求,同时用户的post的请求如果是json格式,同样能处理。

而此章节就是介绍springmvc结合jackson框架(解析json的框架)如何同时处理post+json请求的。

2创建Springmvc处理post+json请求的程序核心步骤 

1)   环境准备

2)   基于maven创建web工程

3)   配置工程的jar依赖,即修改maven工程的pom.xml

4)   在web工程的web.xml中配置springmvc的相关类

5)   配置springmvc的视图解析文件hello-servlet.xml

6)   编写基于jacson框架解析json的工具类

7)   编写处理post请求时,需要解析的实体类Person

8)   编写控制器类:TestPostController

9)   编写视图展示页面:tpost.jsp

10) 用maven编译工程

11) 将编译后的工程部署到tomcat中,并访问

3代码实现和流程各个环节介绍 

1. 环境准备:

同上一章“第一个简单的springmvc程序”

2.基于maven创建web工程,工程名叫“springmvc_test”

具体步骤同上一章“第一个简单的springmvc程序”

3. 配置工程的jar依赖,即修改maven工程的pom.xml

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test</groupId>

  <artifactId>springmvc_test</artifactId>

  <packaging>war</packaging>

  <version>0.0.1-SNAPSHOT</version>

  <name>springmvc_test Maven Webapp</name>

  <url>http://maven.apache.org</url>

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

   

        <dependency>

            <groupId>javax.servlet</groupId>

            <artifactId>javax.servlet-api</artifactId>

            <version>3.1.0</version>

            <scope>provided</scope>

        </dependency>

 

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-core</artifactId>

            <version>4.1.4.RELEASE</version>

        </dependency>

 

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-web</artifactId>

            <version>4.1.4.RELEASE</version>

        </dependency>

 

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-webmvc</artifactId>

            <version>4.1.4.RELEASE</version>

        </dependency>

       

 

      <dependency> 

          <groupId>com.fasterxml.jackson.core</groupId> 

          <artifactId>jackson-core</artifactId> 

          <version>2.3.3</version> 

      </dependency> 

       

      <dependency> 

          <groupId>com.fasterxml.jackson.core</groupId> 

          <artifactId>jackson-annotations</artifactId> 

          <version>2.3.0</version> 

      </dependency> 

       

      <dependency> 

          <groupId>com.fasterxml.jackson.core</groupId> 

          <artifactId>jackson-databind</artifactId> 

          <version>2.3.3</version> 

      </dependency> 

   

  </dependencies>

  <build>

    <finalName>springmvc_test</finalName>

  </build>

</project>

4. 在web工程的web.xml中配置springmvc的相关类,包括springmvc的核心类DispatcherServlet,spring的核心类ContextLoaderListener

具体步骤同上一章“第一个简单的springmvc程序”

5. 配置springmvc的视图解析文件hello-servlet.xml,

    此xml文件的目的是:配置springmvc作为控制器时的视图解析相关功能,包括:自动加载某个包下的所有控制器实现类,对于返回的界面自动加上所处文件夹路径,和文件后缀。

具体步骤同上一章“第一个简单的springmvc程序”

6. 编写基于jacson框架解析json的工具类

第一步:创建文件夹,src/main/java。用来放代码的文件夹,如果有了则不用再创建

第二步:在该文件夹下创建包:

com.test.util

第三步:创建json的工具类:JacksonUtil

package com.test.util;

 

import com.fasterxml.jackson.annotation.JsonInclude.Include;

import com.fasterxml.jackson.databind.DeserializationFeature;

import com.fasterxml.jackson.databind.ObjectMapper;

 

public class JacksonUtil {

  

   //将一个json数据转化为对象

   public static <T> T parseStringToObject(String jackson, Class<T> clazz) {

      if(jackson!=null && !"".equals(jackson)){

         ObjectMapper objectMapper = new ObjectMapper();

         objectMapper.configure(DeserializationFeature.

FAIL_ON_UNKNOWN_PROPERTIES , false); 

         try {

            return objectMapper.readValue(jacksonclazz);

         } catch (Exception e) {

            throw new RuntimeException("parse jackson to object failed!"e);

         }

      }

      return null;

   }

  

     //将输入得Object转换为Json输出

    public static String parseObjectToLightString(Object obj) {

        ObjectMapper objectMapper = new ObjectMapper();

        objectMapper.setSerializationInclusion(Include.NON_NULL);

        try {

            return objectMapper.writeValueAsString(obj);

        } catch (Exception e) {

            throw new RuntimeException("parse jackson to object failed!"e);

        }

    }

 

}

7. 编写处理post请求时,需要解析的实体类Person

第一步:在src/main/java文件夹下创建包:

com.test.model

第二步:创建实体类:Person

package com.test.model;

 

public class Person {

 

   private long id;

  

   private String name;

 

   public long getId() {

      return id;

   }

 

   public void setId(long id) {

      this.id = id;

   }

 

   public String getName() {

      return name;

   }

 

   public void setName(String name) {

      this.name = name;

   }

  

}

8. 编写控制器类:TestPostController

第一步: src/main/java文件夹下创建包:

com.test.controller

第三步:创建控制器类TestPostController,此类有如下几点:

1. 在类名上边增加了 @RequestMapping(value = "tpost")

注解,此注解代表:访问此控制器里的方法时,请求链接前都要增加一个tpost

2. 类中有两个方法,作用分别是:

方法1的作用:此方法的目的是接受请求,跳转到某个界面

方法2的作用:接受用户的post的请求和json数据,并进行处理

具体代码如下:

package com.test.controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

 

import com.test.model.Person;

import com.test.util.JacksonUtil;

 

@Controller

//在类名上加如下value,代表访问此控制器里的方法时,请求链接中都要增加一个tpost.比如访问方法returnMessage,链接就是:../tpost/temp

@RequestMapping(value = "tpost")

public class TestPostController {

  

//此方法的目的是接受请求,跳转到某个界面

   @RequestMapping(value = "/temp")

    public String returnMessage(Model model) {

        return "tpost";

    }

 

   //此方法的目的是接受用户的post的请求和json数据,并进行处理

   @RequestMapping(value = "/add",  method=RequestMethod.POST)

    public @ResponseBody Person addPerson(@RequestBody String addinfo){

      Person p = new Person();

      p = (Person)JacksonUtil.parseStringToObject(addinfo, Person.class);

      System.out .println(p.getName());

 

      p.setId(55l);

      return p;

    }

}

9. 编写视图展示页面:tpost.jsp

在src/main/webapp/WEB-INF/pages目录下创建

tpost.jsp

<!DOCTYPEhtml>

<html>

 

<head>

  <meta charset="utf-8">

  <title></title>

</head>

 

<body>

  <div id="test"></div>

</body>

<script>

  var ajax = new XMLHttpRequest;

  ajax.open("POST""http://localhost:8080/springmvc_test/tpost/add"),

  ajax.setRequestHeader("Content-Type""application/json"),

  ajax.onload = function() {

    var result = JSON.parse(ajax.responseText);

    document.getElementById("test").innerHTML = result.id;

  },

  ajax.onerror = function() {

 

  },

  ajax.send(JSON.stringify({

    name: "tree",

  }));

</script>

 

</html>

10. 用maven编译工程

在工程sprngmvc-test右键至Run As,然后找到

Maven install

11. 都创建和编译完成后,工程的整体结构图如下:

12. 将编译后的工程部署到tomcat中,并访问

    在eclipse中配置一个server,增加tomcat。

    然后通过tomcat将编译后的springmvc_test的web工程部署进去

    访问链接是:

http://localhost:8080/springmvc_test

  /tpost/temp

整个访问流程是:

1. 先到TestPostController类中的returnMessage中,

2. 然后由此方法跳转到tpost.jsp中,

3. tpost.jsp自动发起ajax请求,请求连接是:

http://localhost:8080/springmvc_test/tpost/add

4. 然后此链接就访问到TestPostController类中的addPerson方法中

5. 此方法返回数据到tpost.jsp中,最终展示如下:

Springmvc处理post+json数据


本站代码下载方法:


以上是关于Springmvc处理post+json数据的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 数据传递给 Spring MVC 控制器

在SpringMVC中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案

springmvc处理json

SpringMVC—对Ajax的处理(含 JSON 类型)

springMvc 的post不能用modelandview返回的情况

springMVC接受json类型数据