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(jackson, clazz);
} 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中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案